如何在Bash Shell中导入尚未存在的PostgreSQL数据库?
如何在Bash Shell中直接导入尚未存在的PostgreSQL数据库?
核心解决方案
要在Bash中直接完成「不存在数据库的导入」,无需进入psql交互模式,可通过以下几种方式实现:
方式1:先创建数据库再导入(分两步执行)
直接在Bash中用psql -c参数执行创建数据库的SQL命令,随后执行导入操作:
# 1. 创建目标数据库(连接默认的postgres系统数据库执行创建命令) psql -U postgres -c "CREATE DATABASE english;" # 2. 导入数据到刚创建的数据库 psql -U postgres -d english < /tmp/database.sql
方式2:合并为单条命令执行
用&&连接两个命令,确保数据库创建成功后再执行导入:
psql -U postgres -c "CREATE DATABASE english;" && psql -U postgres -d english < /tmp/database.sql
方式3:导出时添加自动创建数据库的参数
如果导出备份时加上--create参数,备份文件会包含创建数据库的语句,导入时直接连接默认的postgres数据库即可自动完成创建+导入:
# 带--create参数导出数据库 pg_dump --no-owner --create --dbname=postgresql://postgres:password@localhost/english > /tmp/database.sql # 直接导入,无需提前创建数据库 psql -U postgres < /tmp/database.sql
失败原因说明
之前直接导入失败是因为psql需要连接到已存在的数据库才能执行导入操作,指定不存在的english数据库作为目标时,会触发FATAL: database "english" does not exist错误。必须先确保目标数据库存在,或者让备份文件包含自动创建数据库的逻辑。
内容的提问来源于stack exchange,提问作者showkey
相关产品推荐
相关产品推荐

