초기화 스크립트에서 PostgreSQL 디렉토리를 초기화하려고하지만이 단계에서는 실행중인 PostgreSQL 서버가 필요하지 않습니다.PostgreSQL 서버를 실행하지 않고 PostgreSQL 데이터베이스를 초기화하는 방법
이 난 그냥 (사용자 postgres
등) 클러스터를 만들 경우 생각할 수 없을 것이다 :
initdb -D ...
그러나, 나는 또한 PostgreSQL의 역할을 만들 데이터베이스를 작성하고도 (일부 확장 기능을 추가 할 필요가) 사용자 postgres
같이
createuser someuser
createdb -O someuser somedb
echo 'CREATE EXTENSION xyz;' | psql somedb
후자의 명령은 실행중인 PostgreSQL 서버가 필요합니다. 따라서이 모든 일이 상당히 복잡해집니다 :
특히 PostgreSQL 서버를 기다리는 부분은 절대로 100 % 신뢰할 수 없습니다. 나는 많은 변종을 시험해 보았는데, 각각은 약 20 회 실행에 실패했다. 또한 프로세스를 강제 종료하는 것이 간단한 쉘 스크립트에서 100 % 신뢰할 수있는 것은 아니며 올바르게 중지 된 것은 아닙니다.
저는 이것이 서버 부트 스트랩이나 VM 이미지 준비와 관련된 모든 사용 사례에서 발생하는 표준 문제라고 생각합니다. 따라서 2016 년에는 기존의 현실적인 도구가 있어야합니다. 따라서 내 질문은 다음과 같습니다.
- 더 간단하고 안정적인 방법이 있습니까?
- 예를 들어 PostgreSQL 서버를 일부 특수 모드로 실행하는 방법이 있습니다.이 모드는 방금 시작되어 특정 SQL 명령을 실행하고 마지막 SQL 명령이 끝난 직후 종료됩니다.
- 거친 아이디어로, 내부에서 PostgreSQL 테스트 스위트가이 용도로 재사용 될 수 있습니까?
감사합니다! 단일 사용자 모드는 누락 된 힌트였습니다. 그러나 예제 코드에는 약간의 결함이 있습니다. 데이터베이스를 작성하기 전에 데이터베이스에 액세스하려고 시도합니다. 'postgres --single'은'postgres' 데이터베이스로 한 번, 그리고 나서 생성 된 데이터베이스로 두 번 실행해야합니다. – vog
물론. dbname은 예제 일뿐입니다. 더 명확하게 답변을 업데이트하겠습니다. –