postgresql 11 docker创建自定义数据库
我想创建自定义脚本,它将创建数据库连接到它并初始化模式。因此,我创建了以下shell脚本: 文件:postgresql 11 docker创建自定义数据库,postgresql,docker,Postgresql,Docker,我想创建自定义脚本,它将创建数据库连接到它并初始化模式。因此,我创建了以下shell脚本: 文件:100\u sample\u create.sh #!/bin/bash mkdir -p /var/lib/postgresql/tablespaces/SAMPLECLIENT mkdir -p /var/lib/postgresql/tablespaces/SAMPLEINDEX set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER
100\u sample\u create.sh
#!/bin/bash
mkdir -p /var/lib/postgresql/tablespaces/SAMPLECLIENT
mkdir -p /var/lib/postgresql/tablespaces/SAMPLEINDEX
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE ROLE SAMPLEOWNER;
CREATE USER SAMPLE WITH ENCRYPTED PASSWORD 'samplepwd';
GRANT SAMPLEOWNER TO SAMPLE;
CREATE TABLESPACE SAMPLECLIENT OWNER SAMPLEOWNER LOCATION '/var/lib/postgresql/tablespaces/SAMPLECLIENT';
CREATE TABLESPACE SAMPLEINDEX OWNER SAMPLEOWNER LOCATION '/var/lib/postgresql/tablespaces/SAMPLEINDEX';
CREATE DATABASE SAMPLE OWNER SAMPLEOWNER ENCODING 'UTF-8' TABLESPACE SAMPLECLIENT CONNECTION LIMIT -1;
EOSQL
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "SAMPLEOWNER" --dbname "SAMPLE" <<-EOSQL
CREATE SCHEMA SAMPLE;
ALTER SCHEMA SAMPLE OWNER TO SAMPLEOWNER;
ALTER DATABASE SAMPLE SET search_path TO SAMPLE;
ALTER ROLE SAMPLEOWNER SET search_path TO SAMPLE;
ALTER ROLE SAMPLEOWNER SET default_tablespace = SAMPLECLIENT;
GRANT ALL ON DATABASE SAMPLE TO SAMPLEOWNER;
GRANT ALL ON SCHEMA SAMPLE TO SAMPLEOWNER;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA SAMPLE TO SAMPLEOWNER;
EOSQL
文件docker compose.yml
version: "3"
services:
sample-postgres:
image: "postgres:11"
container_name: "sample-postgres"
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=Password1.
volumes:
- ./100_sample_create.sh:/docker-entrypoint-initdb.d/100_sample_create.sh
- ./110_sample_init.sh:/docker-entrypoint-initdb.d/110_sample_init.sh
但是,当启动容器时,出现以下错误:
/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/110_sample_init.sh
2019-05-22 13:56:05.603 UTC [72] FATAL: role "SAMPLEOWNER" does not exist
psql: FATAL: role "SAMPLEOWNER" does not exist
这是否意味着用户仅在$POSTGRES_DB
数据库中创建,而在示例
DB中不可用?如何更改脚本以正确创建自定义数据库并初始化它?我知道我可以使用docker参数自定义db的名称,但我想通过脚本来实现这一点,因为我需要在容器中有更多的数据库。您使用的命令:
CREATE ROLE SAMPLEOWNER;
创建名为sampleowner的角色(全部小写)。如果您确实希望它是大写的,请使用:
CREATE ROLE "SAMPLEOWNER";
您使用的命令:
CREATE ROLE SAMPLEOWNER;
创建名为sampleowner的角色(全部小写)。如果您确实希望它是大写的,请使用:
CREATE ROLE "SAMPLEOWNER";
来自文档:`您必须具有CREATEROLE权限或数据库超级用户才能使用此命令',您是超级用户还是具有此权限?你对哪个问题有何评论?应创建角色SAMPLEOWNER,因为执行过程中没有错误。从文档中可以看出:`您必须具有CREATEROLE权限或是数据库超级用户才能使用此命令',您是超级用户还是具有此权限?你对哪个问题有何评论?应创建角色SAMPLEOWNER,因为执行过程中没有错误。谢谢,另外一件事是将
LOGIN
添加到角色SAMPLEOWNER
创建脚本。是的,因为它是作为角色创建的,所以默认情况下它没有登录权限。如果将单词ROLE替换为USER,默认情况下它将获得这些权限(这是两个命令之间的唯一区别)。谢谢,另外一件事是将LOGIN
添加到ROLESAMPLEOWNER
创建脚本中。是的,因为它是作为角色创建的,所以默认情况下它没有登录权限。如果将单词ROLE替换为USER,默认情况下它将获得这些权限(这是两个命令之间的唯一区别)。