postgresql - 在sql postgres中切换数据库
问题描述
我正在尝试创建一个 POSTGRES 数据库图像,其中我的所有数据库和模式在启动时都被初始化如下,
version: '3.8'
services:
iamstorepg:
image: library/postgres:10
environment:
- POSTGRES_DB=pgiam
- POSTGRES_USER=iam
- POSTGRES_PASSWORD=iam
ports:
- 5432:5432
restart: always
volumes:
- "./schema1.sql:/docker-entrypoint-initdb.d/1-schema.sql"
- "./schema2-db.sql:/docker-entrypoint-initdb.d/2-schema.sql"
在第二个 sql 文件中,我正在尝试创建另一个数据库并使用所有需要的表对其进行初始化,如下所示,
CREATE DATABASE DB1
WITH
OWNER = iam
ENCODING = 'UTF8'
CONNECTION LIMIT = -1;
GRANT ALL PRIVILEGES ON DATABASE DB1 to iam;
/*\connect DB1;
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO iam;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO iam;*/
---
-- Drop table
DROP TABLE IF exists DB1.public.user_involvements;
----- New proposition user-rol -> role-resource relationship one to many
-- Create User-roles table (authorisations or involvements , however you would like to call it)
CREATE TABLE pgiamrolestore.public.tb1(
id uuid NOT NULL,
path varchar(255) NOT NULL,
code varchar(255) not null,
is_active bool NOT null default true
);
这里的问题是,即使正在创建第二个数据库,我也无法在其中指定表,并且该表 TB1 正在第一个数据库“PGIAM”中创建。有没有办法解决这个问题?
解决方案
我将我的 sql 文件更改为 shell,我可以运行 \c 命令来切换数据库,如下所示,
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE DATABASE DB1
WITH
OWNER = iam
ENCODING = 'UTF8'
CONNECTION LIMIT = -1;
GRANT ALL PRIVILEGES ON DATABASE DB1 to iam;
/*\connect DB1;
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO iam;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO iam;*/
---
-- Drop table
DROP TABLE IF exists DB1.public.user_involvements;
----- New proposition user-rol -> role-resource relationship one to many
-- Create User-roles table (authorisations or involvements , however you would like to call it)
CREATE TABLE pgiamrolestore.public.tb1(
id uuid NOT NULL,
path varchar(255) NOT NULL,
code varchar(255) not null,
is_active bool NOT null default true
);
EOSQL
推荐阅读
- c# - 为什么网络摄像头在一段时间后冻结
- networking - ICMP 数据包无法转发
- javascript - 如何从新的`firebase.firestore.FieldValue.serverTimestamp()` 中获取 JavaScript 日期对象
- java - 枚举返回数组流
- cassandra - DSE Cassandra OperationTimedOutException
- c++ - 使用模板实现 CUDA 设备阵列
- azure - LUIS-app:尝试安装“Kudu Sync”时,“npm”未被识别为内部或外部命令
- c# - Linq查询仅选择类型的属性?
- javascript - 如何根据 IP 位置将用户重定向到子域?
- ruby-on-rails - 如何从html中提取十六进制颜色