Всем доброго дня !
Для Django (веб-вреймвок на Python) проекта решил использовать новую для себя БД PostgreSQL.
Создал БД и сделал ее владельцем только что созданного пользователя dbuser, которому задал пароль.
В настройки Django проекта прописал (тут вроде все верно):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'ew',
'USER': 'dbuser',
'PASSWORD': '...',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
После чего запустил migrate (по этой команде Django соединяется с БД и заливает в нее изменения).
И все прошло успешно. Я могу зайти зайти в интерфейс администратора автоматически созданный Django в котором видно, что сам Django смог подключиться к БД, создать в ней нужные таблицы и записи в ней.
Но после того, как я захотел зайти в эту БД через консольку psql и увидеть данные в ней мне выдавалась ошибка аутентификации.
После чего, я нашел файл hba_file:
postgres=# SHOW hba_file;
hba_file
--------------------------------------
/etc/postgresql/9.3/main/pg_hba.conf
(1 row)
И поменял в нем строчку
local all postgres peer на
local all postgres md5, перезапустил postgesql и вроде смог зайти:
postgres@eworld:/home/WMUser/ew$ psql -U dbuser -d ew
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ru_RU.UTF-8",
LC_ADDRESS = "ru_RU.UTF-8",
LC_MONETARY = "ru_RU.UTF-8",
LC_NUMERIC = "ru_RU.UTF-8",
LC_TELEPHONE = "ru_RU.UTF-8",
LC_IDENTIFICATION = "ru_RU.UTF-8",
LC_MEASUREMENT = "ru_RU.UTF-8",
LC_TIME = "ru_RU.UTF-8",
LC_NAME = "ru_RU.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Password for user dbuser:
psql (9.3.8)
Type "help" for help.
ew=>
Но зайдя в БД: \c ew
И решив увидеть все таблицы которые создал Django я увидел:
ew=> \dt
No relations found.
Ничего не понимаю, вроде бы данные где-то есть, но либо я этим пользователем их просто не вижу, либо они находятся где-то в другом месте.
В Django есть такая комманда: dbshell, через нее можно войти в БД которую я прописал в Django конфиге. И вот в чем магия: когда я зашел в postgresql консоль через нее, то смог увидеть все таблички:
WMUser@eworld:~/ew/eworld$ python manage.py dbshell
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_PAPER = "ru_RU.UTF-8",
LC_ADDRESS = "ru_RU.UTF-8",
LC_MONETARY = "ru_RU.UTF-8",
LC_NUMERIC = "ru_RU.UTF-8",
LC_TELEPHONE = "ru_RU.UTF-8",
LC_IDENTIFICATION = "ru_RU.UTF-8",
LC_MEASUREMENT = "ru_RU.UTF-8",
LC_TIME = "ru_RU.UTF-8",
LC_NAME = "ru_RU.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
psql (9.3.8, server 9.3.3)
Type "help" for help.
ew=> \dt
List of relations
Schema | Name | Type | Owner
--------+----------------------------+-------+--------
public | auth_group | table | dbuser
public | auth_group_permissions | table | dbuser
public | auth_permission | table | dbuser
public | auth_user | table | dbuser
public | auth_user_groups | table | dbuser
public | auth_user_user_permissions | table | dbuser
public | django_admin_log | table | dbuser
public | django_content_type | table | dbuser
public | django_migrations | table | dbuser
public | django_session | table | dbuser
(10 rows)
ew=>
Есть еще одна интересная особенность (может поможет мне помочь) если я делаю \l из django консоли, то мне выводит:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
ew | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | dbuser=CTc/postgres
А если из psql:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
ew | dbuser | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
Т.е. в одном случае у БД ew один владелец, в другом случае другой. Как так? Складывается такое ощущение, как будто бы это вообще 2 совсем разные базы...
Прошу помощи в том, чтобы разобраться, что происходит.
Заранее спасибо за ответ!