사용자를 위해 역할과 데이터베이스를 자동으로 생성하는 스크립트가있는 PostgreSQL 9.5 서버가 있습니다. 이러한 데이터베이스 내에서 특정 확장명 (예 : pgcrypto)을 활성화하는 것이 도움이되지만, 이해하는 바와 같이 실행하려면 수퍼 유저 여야합니다 CREATE EXTENSION. 수퍼 유저 계정으로 수동으로 로그인하지 않고 이러한 확장을 활성화하는 방법이 있습니까?
사용자를 위해 역할과 데이터베이스를 자동으로 생성하는 스크립트가있는 PostgreSQL 9.5 서버가 있습니다. 이러한 데이터베이스 내에서 특정 확장명 (예 : pgcrypto)을 활성화하는 것이 도움이되지만, 이해하는 바와 같이 실행하려면 수퍼 유저 여야합니다 CREATE EXTENSION. 수퍼 유저 계정으로 수동으로 로그인하지 않고 이러한 확장을 활성화하는 방법이 있습니까?
답변:
에서 워드 프로세서 확장에,
수퍼 유저 (부울) 이 매개 변수가 true 인 경우 (기본값) 수퍼 유저 만 확장을 만들 거나 새 버전으로 업데이트 할 수 있습니다 . false로 설정되면 설치 또는 업데이트 스크립트에서 명령을 실행하는 데 필요한 권한 만 필요합니다.
값은에 설정되어 있지 않으므로 pgcrypto.control기본적으로 true로 설정되어 있으며 수퍼 유저가 필요합니다.
이것은 CREATE EXTENSIONCREATE EXTENSION 의 문서가 당신을 믿게 만들었 음에도 불구하고 데이터베이스의 단순한 소유자가 될 수 없음 을 의미합니다 .
나는 열심히 노력했지만 false기쁨은 없었습니다. C는 신뢰할 수없는 언어이며
오류 : 언어 c에 대한 권한이 거부되었습니다.
수퍼 유저 만 신뢰할 수없는 언어로 함수를 작성할 수 있습니다.
... 물론 수퍼 유저로서 c신뢰할 수 있습니다 UPDATE pg_language set lanpltrusted = true where lanname = 'c';. 그런 다음 CREATE EXTENSION pgcrypto비 수퍼 유저로서 잘 작동합니다. 그러나 사용자가 확장 디렉토리에 소스를 업로드 한 다음 데이터베이스에 설치하는 것에 대해 걱정해야하는 경우 나쁜 생각처럼 들립니다. 즉, 나는 그렇게 멀리 가지 않을 것입니다. 이 고양이를 피부에 바르는 또 다른 방법을 찾았습니다.
pg_dump확장에 관한 문장을 덤핑하는 것을 막을 수 있는 옵션이 없다는 점은 무엇입니까 ? 현재 외부 텍스트 처리 도구를 사용하여에 의해 덤프 된 SQL에서 해당 명령문을 제거해야합니다 pg_dump.
template1다음에서 각 사용자 데이터베이스를 만드는template1등CREATE DATABASE foo OWNER=userfoo TEMPLATE=template1?