如何用Bash脚本在Docker容器的PostgreSQL指定库中创建Schema
在指定PostgreSQL数据库中创建Schema的正确Bash脚本写法
你遇到的问题根源很明确:执行CREATE SCHEMA命令时没指定目标数据库,默认会连接到postgres系统库,所以schema被建到了那里;而直接在schema名前加数据库前缀的写法不符合PostgreSQL语法,必然报错。
正确的做法是,在执行创建schema的psql命令时,通过-d参数指定要操作的目标数据库$DB_NAME,让命令在testdb的上下文里执行。修改后的脚本如下:
DB_NAME='testdb' schm='testschema' # 创建目标数据库 PGPASSWORD=$PGPASS psql -X -h localhost -p $DB_PORT -U postgres -c "CREATE DATABASE $DB_NAME;" # 连接到目标数据库并创建schema PGPASSWORD=$PGPASS psql -X -h localhost -p $DB_PORT -U postgres -d $DB_NAME -c "CREATE SCHEMA $schm;"
本质上PostgreSQL的CREATE SCHEMA是当前连接数据库的上下文操作,无法跨库直接指定,必须先连接到目标数据库再执行创建命令。
内容的提问来源于stack exchange,提问作者Alex Belke
相关产品推荐
相关产品推荐

