사용자를 위해 역할과 데이터베이스를 자동으로 생성하는 스크립트가있는 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
?