dockerfile postgresl创建角色

时间:2017-10-24 16:48:41

标签: sql bash postgresql docker postgresql-10

PostgreSQL 10

我试图在发布时在docker容器中创建一个角色

我尝试过这样创建角色:

gosu postgres pg_ctl start -D /var/lib/postgresql/data

if [ "${PGUSER}" != 'postgres' ]; then
  gosu postgres psql --command="CREATE USER ${PGUSER} SUPERUSER WITH PASSWORD '${PGPASSWORD}';" --echo-hidden --echo-queries
fi

gosu postgres pg_ctl stop -w -D /var/lib/postgresql/data

这仍然让我致命:角色" grafadmin"不存在

尝试使用以下命令创建数据库时

gosu postgres createdb -O grafadmin grafana  

我也尝试过:

cat > ${HOMEDIR}/user.sql <<SQL
DO
$body$
BEGIN
   IF NOT EXISTS (
      SELECT
      FROM   pg_catalog.pg_user
      WHERE  username = '${PGUSER}') THEN
      CREATE ROLE ${PGUSER} WITH SUPERUSER PASSWORD '${PGPASSWORD}';
   END IF;
END
$body$;
SQL
cat ${HOMEDIR}/user.sql
gosu postgres psql --file="${HOMEDIR}/user.sql" --echo-hidden --echo-queries

我可能忽略了一些简单的事情......

1 个答案:

答案 0 :(得分:0)

创建可以登录的用户时,请先选择CREATE USER而不是CREATE ROLE。它会添加一个额外的参数LOGIN。没有它你就无法登录。

cat > ${HOMEDIR}/user.sql <<SQL
DO
$body$
BEGIN
   IF NOT EXISTS (
      SELECT
      FROM   pg_catalog.pg_user
      WHERE  username = '${PGUSER}') THEN
      CREATE USER ${PGUSER} WITH SUPERUSER PASSWORD '${PGPASSWORD}';
   END IF;
END
$body$;
SQL
cat ${HOMEDIR}/user.sql
gosu postgres psql --file="${HOMEDIR}/user.sql" --echo-hidden --echo-queries

了解更多信息,请参阅:https://www.postgresql.org/docs/10/static/sql-createuser.html