如果不存在则创建数据库(PostgreSQL)

15
我是新手PostgreSQL,我试图创建一个模式文件,其中包含创建数据库和必需表所需的所有脚本。 我用来为SQL Server执行此操作的方法是检查数据库是否存在,然后运行必要的脚本。

在PostgreSQL中,下面的脚本会抛出错误,说“无法从函数或多命令字符串执行CREATE DATABASE”。
do $$
begin
If not exists (select 1 from pg_database where datname = 'TestDB')
Then
 CREATE DATABASE "TestDB";
end if;
end
$$

我通过导出数据库的备份文件创建了一个PostgreSQL数据库转储文件,但其中包含了以下内容:

Drop Database "TestDB"

Create Database "TestDB"

这意味着每次运行模式文件时,数据库将被删除并重新创建,如果数据库中存在数据,这将是一个问题。

请问如何在不必每次都删除和重新创建数据库的情况下,在postgreSQL中检查数据库是否存在?

感谢您的提前帮助。


3
这回答解决了您的问题吗?如何在PostgreSQL中模拟CREATE DATABASE IF NOT EXISTS? - benvc
1个回答

13

针对创建数据库(如果不存在)并保持其原状的shell脚本:

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

以下是此问题的答案,由andreasl提供。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接