2011-11-02 1 views
1

모든 postgresql 데이터베이스가 리눅스에서 실행되는 다른 컴퓨터에 퍼져있는 상태에서 시뮬레이션을 실행해야합니다.포스트그레스에서 createdb와 관련된 문제

나는 성공적으로 컴파일 소스 코드에서의 PostgreSQL를 구축하고 나는 또한 서버를 실행할 수 있습니다,하지만이 명령을 사용하여 새로운 DB를 만들려고 할 때 :

:

./postgresql/bin/createdb db1 

을 나는이 오류

createdb: could not connect to database postgres: FATAL: role "giulio" does not exist 

여기서 giulio는 모든 컴퓨터에 액세스하는 내 사용자 이름입니다.

일부 컴퓨터에서는 다른 컴퓨터에서는 작동하지 않습니다. 나는 정말로 문제의 근원을 알 수 없다. 포스트그레스의 액세스 제어와 관련이 있다고 생각합니다.

Google에 대한 여러 조사를했지만 문제를 발견하고 해결할 수 없었습니다.

누구든지이 작업을 수행하는 방법을 알고 있습니까?

감사합니다,

-Giulio

답변

1

사용자 "giulio"가 이미 알려진 컴퓨터에서 initdb을 실행하여 정확히이 사용자가 DB 수퍼 유저로 만드는 것으로 가정합니다. inidb(1) (강조 광산)에서 인용 : 다른 기계에

--username=username Selects the user name of the database superuser. This defaults to the name of the effective user running initdb. It is really not important what the superuser's name is, but one might choose to keep the customary name postgres, even if the operating sys‐ tem user's name is different.

난 당신이 희망 postgres를 사용하여, 다른 사용자와 initdb을 실행 한 가정합니다.

"giulio"가 수퍼 유저 인 컴퓨터에서 데이터베이스 클러스터를 삭제하고 표준 postgres 사용자를 사용하여 새 데이터베이스 클러스터를 설정한다는 표준 트랙을 다시 제안합니다. 그런 다음 다른 사용자 "giulio"를 추가하십시오. 일부 스크립트/프로그램에서 postgres이라는 수퍼 유저 계정이 필요하기 때문에 더 많은 혼란을 피할 수 있습니다.

2

PostgreSQL는 자신의 사용자와 OS의 그것과 별개의 역할이있다. 일반적으로 전용 슈퍼 유저 인 포스트그레스가 있습니다. 사용자 관리 정보의 경우, 이쪽을 봐 :

http://www.postgresql.org/docs/9.1/interactive/user-manag.html

포스트 그레스의 명령을 실행, 당신은 (이미 기존 DB 사용자로 로그인하지 않는 한)이 -U 플래그를 사용자 지정해야합니다. createdb 스크립트를 호출 할 때 -U 플래그를 사용하지 않았기 때문에 서버는 호출자 (giulo)의 uid가 사용되어야한다고 가정했지만 데이터베이스에 사용자 "giulio"를 추가하지 않았습니다. 따라서 오류 메시지.

그래서

./postgresql/bin/createdb -U postgres db1

로 명령을 실행하고 그것을 작동합니다. 그런 다음 나중에 수퍼 유저로 모든 작업을 수행하는 대신 db에서 다른 사용자와 역할을 만들 수 있습니다.

1

내 대답은 더 간단했습니다 ...그 일이라면

brew install postgresql 

확인할 나는 달렸다 : 난 그냥 다음 실행하는 데 필요한 실현

which createdb 

파일 경로를 확인하고이 일을하면, 그것은했다! 희망이 도움이됩니다.