【问题标题】:"Create database if not exists" in postgrespostgres中的“如果不存在则创建数据库”
【发布时间】:2019-03-06 11:43:58
【问题描述】:

我是 postgreSQL 的新手,我正在尝试创建一个模式文件,该文件将包含创建数据库和所需表所需的所有脚本。我过去对 SQl 服务器执行此操作的方法是检查数据库是否存在,然后运行必要的脚本。

postgreSQL 中的以下脚本抛出错误,“无法从函数或多命令字符串执行 CREATE DATABASE”

do $$
begin
If not exists (select 1 from pg_database where datname = 'TestDB')
Then
 CREATE DATABASE "TestDB";
end if;
end
$$

我通过导出数据库的备份创建了一个 postgres 数据库转储文件,但其中包含,

Drop Database "TestDB"

Create Database "TestDB"

这意味着每次我运行架构文件时,数据库都会被删除并重新创建,如果数据库中存在数据就会出现问题。

如何检查数据库是否存在于 postgreSQL 中,而不必在每次运行文件时删除数据库并重新创建它?

提前致谢

【问题讨论】:

标签: postgresql postgresql-9.3 pgadmin-4


【解决方案1】:

如果数据库不存在则创建数据库,否则保持原样:

psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'my_db'" | grep -q 1 || psql -U postgres -c "CREATE DATABASE my_db"

我发现这对 devops 配置脚本很有帮助,您可能希望在同一个实例上运行多次。

对于那些想要解释的人:

-c = run command in database session, command is given in string
-t = skip header and footer
-q = silent mode for grep 
|| = logical OR, if grep fails to find match run the subsequent command

回答来自this 问题的andreasl

【讨论】:

    猜你喜欢
    • 2013-03-26
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多