Sug*_*n88 6 postgresql postgresql-9.3 pgadmin-4
我是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
$$
Run Code Online (Sandbox Code Playgroud)
我通过导出数据库备份创建了一个postgres数据库转储文件,但其中包含,
Drop Database "TestDB"
Create Database "TestDB"
Run Code Online (Sandbox Code Playgroud)
这意味着每次我运行架构文件时,都会删除并重新创建数据库,如果数据库中存在数据,那将是一个问题。
如何检查数据库是否存在于postgreSQL中,而不必每次运行文件时都删除数据库并重新创建数据库?
提前致谢
koo*_*oos 14
对于 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"
Run Code Online (Sandbox Code Playgroud)
我发现这对于 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4497 次 |
| 最近记录: |