如何解决在sql postgres中切换数据库
我正在尝试创建一个POSTGRES db映像,并在启动时按如下所示初始化所有数据库和模式,
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文件中,我试图创建另一个DB并使用所有所需的表将其初始化,如下所示,
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
);
这里的问题是,即使正在创建第二个数据库,我也无法在其中指定表,并且在第一个DB'PGIAM'中创建了该表TB1。有办法解决这个问题吗?
解决方法
我将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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。