0

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

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

4

1 回答 1

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

于 2017-10-24T18:14:25.937 回答