Невозможно получить разрешение на запуск pg_dumpall

Невозможно получить разрешение на запуск pg_dumpall

Все, что я пытаюсь сделать, это сделать резервную копию моего существующего кластера базы данных, чтобы обновить Postgresql 9.4.8 до 9.5. Я использую Ubuntu 16.04.

Я знаю об этом посте:Аутентификация по паролю Postgres не удалась. На самом деле, он уже был добавлен в закладки с последнего раза, когда у меня возникла эта проблема. Я не претендую на какие-либо значимые знания postgres. Я не всегда понимаю, что должно быть командой psql, а что должно быть командой bash, и блоги и то, что я не видел, не всегда дают мне это понять. PG — это просто мой бэкэнд для моих проектов Django. Я, конечно, не понимаю, как у меня снова возникла эта проблема.

Мой пользователь Ubuntu — malikarumi. У меня два пользователя postgres, maikarumi и postgres. Postgres — суперпользователь. Я пытался сделать malikarumi суперпользователем некоторое время назад, но это, по-видимому, не удалось, и нет, я не знаю почему.

Вот моя первая попытка сегодня:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup
pg_dumpall: query failed: ERROR:  permission denied for relation pg_authid
pg_dumpall: query was: SELECT oid, rolname, rolsuper, rolinherit,rolcreaterole, rolcreatedb, rolcanlogin, rolconnlimit, rolpassword, rolvaliduntil, rolreplication, pg_catalog.shobj_description(oid, 'pg_authid') as rolcomment, rolname = current_user AS is_current_user FROM pg_authid ORDER BY 2

А дальше было следующее:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password: 

Обратите внимание, что там ничего нет, никакой помощи, никаких указаний на то, что не так или что с этим делать.

Password: 
Password: 
pg_dump: [archiver (db)] connection to database "esselldb" failed: FATAL:  password authentication failed for user "postgres"
pg_dumpall: pg_dump failed on database "esselldb", exiting

Затем я попробовал еще раз с пустым паролем и точкой с запятой.

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres;
Password: 
pg_dumpall: could not connect to database "template1": fe_sendauth: no password supplied

Обратите внимание, что пароль работает для psql.

malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql
psql (9.4.8)
Type "help" for help.

Но команда не работает, с точкой с запятой или без нее.

postgres=# pg_dumpall > 9-4-backup
postgres-# pg_dumpall > 9-4-backup;
ERROR:  syntax error at or near "pg_dumpall"
LINE 1: pg_dumpall > 9-4-backup

Это работает

malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ sudo cat pg_hba.conf
[sudo] password for malikarumi: 

Видимо, это пользователь unix, а не пользователь базы данных. Но это и всегда был тот же пароль.

Я изменил это

# Database administrative login by Unix domain socket
local   all             postgres                                md5

заглянуть, как предлагалось в предыдущем посте (опять же - как это могло вернуться назад?!)

Но я не смог перезапустить postgres

malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ pg_ctl stop
pg_ctl: command not found
malikarumi@Tetuoan2:/etc/postgresql/9.4/main$ cd ~
malikarumi@Tetuoan2:~$ pg_ctl stop
pg_ctl: command not found

Из psql тоже не получилось

postgres=# pg_ctl stop
postgres-# pg_ctl stop;
ERROR:  syntax error at or near "pg_ctl"
LINE 1: pg_ctl stop
        ^
postgres=# 

Но, по крайней мере, psql все еще пускает меня...

Поэтому я перезагрузил всю машину и попробовал снова. Вы знаете, что произошло

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
pg_dumpall: could not connect to database "template1": FATAL:  Peer authentication failed for user "postgres"   

Итак, я успешно изменил его, но я все еще не могу заставить его работать. ПРИМЕЧАНИЕ: Он НЕ спросил у меня мой пароль!

Тогда я попробовал это

malikarumi@Tetuoan2:~$ su postgres
Password: the right one
su: Authentication failure
malikarumi@Tetuoan2:~$ su postgres
Password: a blank one
su: Authentication failure

И теперь вы в курсе. Кстати, я много раз заглядывал в официальную документацию postgres и нахожу ее плотной и едва понятной. Если вы также знаете хороший базовый учебник для человека, не знакомого с базами данных, как я, это было бы полезно. Спасибо.

решение1

Учитывая контекст, можно ожидать, что произойдут все упомянутые сбои, за исключением одного:

malikarumi@Tetuoan2:~$ pg_dumpall > 9-4-backup -U postgres
Password: 

Здесь вы сообщаете об ошибке, но в другой ситуации ниже:

malikarumi@Tetuoan2:~$ psql -U postgres
Password for user postgres: Note the password works with psql

Вы сообщаете об успехе.

Но это не сходится. Тот же пароль должен работать так же хорошо pg_dumpallв том контексте, который вы упомянули, а именно:

  • схема аутентификации установлена md5​​в pg_hba.conf(до того, как вы измените ее в остальной части поста).
  • целевой пользователь базы данных — postgres через -U postgresопцию.
  • команда вызывает оболочку из вашего собственного пользователя unix malikarumi.

После того, как вы успешно изменили схему аутентификации на peer(последняя часть вашего вопроса), проблема в том, что вы пытаетесь suвместо этого использовать sudo, последний метод является рекомендуемым в Ubuntu.

Используйте эту команду в командной строке:

malikarumi@Tetuoan2:~$ sudo -u postgres pg_dumpall >9-4-backup

Он запросит пароль и отобразит что-то вроде:

[sudo] password for malikarumi:

Обратите внимание, что ожидаетсяваш пароль, тот же самый, который вы используете при открытии сеанса под этим malikarumiименем, в отличие от пароля postgres или пароля базы данных.

sudo -u postgres somepostgrescommand— это всего лишь вариант того, что sudo someadmincommandвам разрешено делать, если вы являетесь администратором этой рабочей станции Ubuntu.

Связанный контент