postgresql - Docker postgreSQL entrypoint-initdb.d 选择数据库
问题描述
我有一个docker-compose.yml
文件
version: '3'
services:
postgres:
image: postgres:13.1
healthcheck:
test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "root" ]
timeout: 45s
interval: 10s
retries: 10
restart: always
environment:
- POSTGRES_USER=root
- POSTGRES_PASSWORD=password
- APP_DB_USER=docker
- APP_DB_PASS=docker
- APP_DB_NAME=docker
volumes:
- ./db:/docker-entrypoint-initdb.d/
ports:
- 5432:5432
在同一目录中有一个db
包含 1 个文件的目录init.sql
:
CREATE TABLE accounts (
user_id serial PRIMARY KEY,
username VARCHAR ( 50 ) UNIQUE NOT NULL,
password VARCHAR ( 50 ) NOT NULL,
email VARCHAR ( 255 ) UNIQUE NOT NULL,
created_on TIMESTAMP NOT NULL,
last_login TIMESTAMP
);
insert into accounts(username,password,email,created_on) values ('a','aaa','assdfdas',now())
当我运行时docker-compose up
(如果数据库为空),init.sql
文件被执行,但执行它的数据库root
不是postgres
,我该如何更改它?
解决方案
\connect <db-name>
您可以在文件中使用 psql 命令init.sql
来连接到正确的数据库(假设数据库已经存在)。
在您的情况下,该init.sql
文件将类似于:
\connect postgres <-- connects to the 'postgres' database
CREATE TABLE accounts (
user_id serial PRIMARY KEY,
username VARCHAR ( 50 ) UNIQUE NOT NULL,
password VARCHAR ( 50 ) NOT NULL,
email VARCHAR ( 255 ) UNIQUE NOT NULL,
created_on TIMESTAMP NOT NULL,
last_login TIMESTAMP
);
...
推荐阅读
- ruby-on-rails - 结合两个 ActiveRecord::Relation 返回一个关系而不是一个数组
- typescript - Firebase pubsub 函数在模拟器中工作,但在生产中不会立即返回
- wordpress - 重定向循环 wordpress 管理员
- google-cloud-platform - 如何在 terraform 模块中生成动态输入参数?
- c++ - 函数的默认参数
- apache-spark - 如何每批次执行操作?
- reactjs - Vite - “源映射指向丢失的源文件”
- reactjs - 更改 useRef.current.classList 时,Jest 包装器未更新
- node.js - 如何在 Firebase 身份验证中正确验证令牌
- vba - 如何使用 SetWindowText 及其句柄在 VBA 中设置窗口的标题?