当前位置: 首页 > 面试题库 >

在Postgres中以单用户模式创建表

胡光霁
2023-03-14
问题内容

我试图从postgres映像创建一个Dockerfile。该仓库说应该通过在/docker-entrypoint-
initdb.d/中放置一个shell脚本来处理初始化。我根据在网上找到的示例放置了以下脚本:

#!/bin/bash
echo "******CREATING DOCKER DATABASE******"
gosu postgres postgres --single <<- EOSQL
   CREATE DATABASE orpheus;
   CREATE USER docker WITH ENCRYPTED PASSWORD 'pwd_docker';
   GRANT ALL PRIVILEGES ON DATABASE orpheus to docker;
   CREATE TABLE profiles ( \
     profile_id    SERIAL UNIQUE PRIMARY KEY, \
     user_id integer NOT NULL UNIQUE, \
     profile_photo_id integer NOT NULL UNIQUE, \
     age integer \
   );
   CREATE TABLE hidden_user ( \
     owner_id    integer NOT NULL PRIMARY KEY, \
     target_id integer NOT NULL \
   );
EOSQL
echo ""
echo "******DOCKER DATABASE CREATED******"

反斜杠似乎是必需的,因为否则会出现解析错误。该脚本运行无误,除CREATE TABLE命令外的所有命令似乎都起作用。

单用户模式不支持表创建吗?如果是这样,是否有更好的方法让dockerfile使用在postgres中创建的表来设置映像?


问题答案:

@a_horse_with_no_name的评论使我处在正确的轨道上。我决定放弃单用户模式,即使它是“推荐”的。相反,我使用pg_ctl启动postgres,加载一些包含表创建内容的sql文件,并使用pg_ctl停止服务器。

我的shell脚本如下所示:

#!/bin/bash
echo "******CREATING DOCKER DATABASE******"

echo "starting postgres"
gosu postgres pg_ctl -w start

echo "bootstrapping the postgres db"
gosu postgres psql -h localhost -p 5432 -U postgres -a -f /db/bootstrap.sql

echo "initializing tables"
gosu postgres psql -h localhost -p 5432 -U postgres -d orpheus -a -f /db/setup.sql

echo "stopping postgres"
gosu postgres pg_ctl stop

echo "stopped postgres"


echo ""
echo "******DOCKER DATABASE CREATED******"


 类似资料:
  • 我想使用CREATE USER命令和已经散列的密码摘要创建一个Postgres用户。经过大量搜索,我认为只有MD5才有可能,直到我找到这个链接。我已经验证了它是这样工作的: 然后,我可以使用密码登录该用户,本文不一定说,但它是“postgres”。现在我知道这是可能的,如何使用.NET 5生成Postgres 13将接受的scram-sha-256摘要?我见过其他Postgres文章使用过时的MD

  • 我无法获得任何与CreateUser一起工作的东西。

  • 我有独立应用程序。它是在java,spring-boot,postgres,它有LiquiBase。 我需要部署我的应用程序和liquibase应该创建所有的表,等等,但它应该在自定义模式中做,而不是公开的。liquibase的所有服务表(databasechangelog和databasechangeloglock)也应该在自定义模式中。在liquibase开始工作之前,我如何在DB中创建模式?

  • 问题内容: 我最困难的时间是在WooCommerce中以编程方式创建订单。我正在使用下面的代码,是否正在创建订单,但是我无法获得客户信息或添加到订单的产品线项目。创建的新订单只是访客,没有任何物品,用户信息等。 问题似乎是,一旦创建了订单对象,尝试向订单中添加数据时就会失败。 这是我在日志中遇到的错误: 任何帮助,将不胜感激! 问题答案: 问题出在您的动作挂钩上。使用以下钩子: 确保给定的产品ID

  • 我正在使用R和包连接到PostgreSQL数据库。db有许多模式,我想知道哪些表与特定的模式相关联。 到目前为止,我已经尝试: 这些都不起作用。 这个相关的问题也存在:使用R在postgres中设置模式名称,这将通过在连接处定义模式来解决这个问题。然而,它还没有得到回答!

  • WordPress有一个管理仪表板。在仪表板中,我们可以作为管理员添加新用户。我想在管理员添加新用户时在MySQL中创建一个表。例如,我创建了一个名为John Smith的用户,其用户名为user1;当我成功添加该用户时,将在名为user1的数据库中创建一个表。