내가 하려는 일은 Postgresql 9.4.8에서 9.5로 업그레이드하기 위해 기존 데이터베이스 클러스터를 백업하는 것뿐입니다. 저는 우분투 16.04를 사용하고 있습니다.
나는 이 게시물을 알고 있습니다:Postgres 비밀번호 인증 실패. 사실 지난번에 이 문제가 발생했을 때 이미 북마크에 추가되어 있었습니다. 나는 의미 있는 포스트그레스 지식을 주장하지 않습니다. psql 명령이 무엇인지, bash 명령이 무엇인지 항상 알 수는 없으며 블로그와 내가 보지 못한 내용이 항상 명확하지는 않습니다. PG는 내 Django 프로젝트의 백엔드일 뿐입니다. 나는 어떻게 이 문제가 다시 발생하는지 확실히 이해하지 못합니다.
내 우분투 사용자는 말리카루미입니다. 저는 maikarumi와 postgres라는 두 명의 postgres 사용자를 가지고 있습니다. Postgres는 슈퍼유저입니다. 저도 얼마 전에 말리카루미를 슈퍼유저로 만들려고 했지만 실패했던 것 같습니다. 이유는 모르겠습니다.
오늘 첫 번째 시도는 다음과 같습니다.
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:
분명히 이것은 데이터베이스 사용자가 아닌 유닉스 사용자입니다. 그러나 그것은 항상 같은 비밀번호였습니다.
나는 이것을 바꿨다
# 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
이제 최신 정보를 얻을 수 있습니다. 그런데 저는 공식 포스트그레스 문서를 여러 번 방문했는데 그 문서가 조밀하고 거의 이해하기 어렵다는 것을 알았습니다. 나처럼 DB가 아닌 사람을 위한 좋은 기본 튜토리얼도 알고 있다면 도움이 될 것입니다. 감사해요.
답변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
in 으로 설정됩니다pg_hba.conf
(나머지 게시물에서 변경하기 전). - 대상 데이터베이스 사용자는
-U postgres
옵션을 통해 postgres입니다. - 이 명령은 자신의 유닉스 사용자로부터 쉘이라고 불립니다
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 워크스테이션의 관리자인 경우 수행할 수 있는 작업의 변형일 뿐입니다 .