pg_dumpall 실행 권한을 얻을 수 없습니다.

pg_dumpall 실행 권한을 얻을 수 없습니다.

내가 하려는 일은 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. 즉,

  • 인증 스키마는 md5in 으로 설정됩니다 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 somepostgrescommandsudo someadmincommand이는 이 Ubuntu 워크스테이션의 관리자인 경우 수행할 수 있는 작업의 변형일 뿐입니다 .

관련 정보