Django и PostgreSQL върху Ubuntu

Публикувано на

Сайтът вече използва за база PostgreSQL вместо MySQL. Мигрирането стана без проблемно, без загуба на информация. Процесът по мигриране протече в следните етапи

Инсталиране на PostgreSQL и необходимите пакети за python:

$ sudo apt-get install postgresql python-psycopg2

Създаване на юзър и база данни за сайта:

$ sudo su - postgres
# createdb <sitename>
# createuser -A -D <sitename> -P

Конфигуриране на PostgreSQL:

Редактира се файла /etc/postgresql/<pgversion>/main/postgresql.conf

променя се

#listen_addresses = 'localhost'

на

listen_addresses = '*'

както и

#password_encryption = on

на

password_encryption = on

Редактира се файла /etc/postgresql/<pgversion>/main/pg_hba.conf

променя се

local all all peer

на

local all all password

Рестартирам PostgreSQL сървъра

$ sudo /etc/init.d/postgresql restart

Дъмпване на текущата база чрез dumpdata

В директорията на проекта изпълнявам:

$ ./manage.py dumpdata --format=xml auth sites flatpages blog gallery > dump.xml

като "auth sites flatpages blog gallery" са имената на приложенията на които искам да запиша.
Използвам xml тъй като при него няма проблем с данните. Аз лично предпочитам json като формат, тъй като е по-четим, но бях срещнал проблеми преди време. Ако данните няма нужда да се четат и не са сложни може да са json, но за по-голяма сигурност използвам xml.

Вместо изреждане на всички приложения може да се използва параметърът на --all. Има случай когато между приложенията има разни релации които пречат на процеса на дъмпване. Така се получава например когато се използва Django-CMS. Получава се Database Error свързана с Placeholder модела. За целта дъмпването на данние трябва да се разбие на две части.

$ ./manage.py dumpdata --format=xml cms.placeholder > dump1.xml
$ ./manage.py dumpdata --format=xml --all --exclude=cms.placeholder > dump2.xml


Промяна на настройките за базата в django settings module

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'sitename',
            'USER': 'sitename',
            'PASSWORD': 'dbpassword',
            'HOST':'',
            'PORT':'',
    },
}

Създаваме таблиците

$ ./manage.py syncdb --all

Използвам --all тъй като south е в INSTALLED_APPS

Зареждане на старите данни от старата база

$ ./manage.py loaddata dump

Рестартиране на сървъра и всичко трябва да е готово. И така сайтът е успешно мигриран от MySQL към PostgreSQL.

Информация за процеса намерих на следните адреси:
http://www.opengroupware.org/en/install/postgresql.html
http://dev.lethain.com/the-django-and-ubuntu-intrepid-almanac/
http://ianlawrence.info/random-stuff/set-up-django-apache-and-postgresql-on-ubuntu-feisty
https://groups.google.com/forum/?fromgroups#!topic/django-cms/cHGzNW4GpxA



 

blog comments powered by Disqus