如何为postgres docker容器的初始化脚本指定当前工作数据库?

Geo*_*los 3 postgresql docker

众所周知,可以使用类似于以下命令的 docker 命令复制要在创建容器时执行的 init.sql 文件:COPY init.sql /docker-entrypoint-initdb.d/

让我们考虑使用一个非常简单的 create table postgresql 语句:

CREATE TABLE films (
  code        char(5) CONSTRAINT firstkey PRIMARY KEY,
  title       varchar(40) NOT NULL,
  did         integer NOT NULL,
  date_prod   date,
  kind        varchar(10),
  len         interval hour to minute
);
Run Code Online (Sandbox Code Playgroud)

问题是这个表是在哪里(在哪个数据库中)创建的?

但更重要的是如何设置当前工作数据库以准确指定我们正在使用哪个数据库?
不仅是这句话,还有后来的所有言论,而且还很多!

b0g*_*usb 5

这里详细解释了数据库的初始化。如何在 Docker Postgres 的脚本中创建用户/数据库

简而言之,初始化期间创建的数据库的名称以及默认创建表的位置由环境变量 给出POSTGRES_DB。如果未设置变量,postgres则使用默认值。

docker-entrypoint-initdb.d使用以下命令一一执行该文件夹中的脚本:

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f <your-file>
Run Code Online (Sandbox Code Playgroud)

因此您已连接到POSTGRES_DB数据库(查看脚本docker-entrypoint.sh)。

在脚本文件中,您仍然可以使用元命令连接到不同的数据库

\connect DBNAME
Run Code Online (Sandbox Code Playgroud)