与 MySQL 不同,PostgreSQL 不支持常用的 "CREATE DATABASE IF NOT EXISTS" 语法。这在通过 JDBC 创建可能已存在或不存在的数据库时带来了挑战。
方法一:在 psql 中使用条件语句
此方法利用在 psql 中执行的条件 DDL 语句:
<code class="language-sql">SELECT 'CREATE DATABASE mydb' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'mydb')\gexec</code>
gexec
命令指示 psql 将查询输出的每一列都视为可执行的 SQL 语句。这允许仅在数据库不存在时创建数据库。
方法二:使用 shell 命令执行条件语句
为了避免多次调用 psql,可以使用 shell 命令来执行条件语句:
<code class="language-bash">echo "SELECT 'CREATE DATABASE mydb' WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'mydb')\gexec" | psql</code>
此命令将语句包装在一个块中,该块只有在数据库不存在时才会执行。
方法三:在 PostgreSQL 事务中使用 dblink
另一种选择是使用 dblink 连接回当前数据库,该连接在事务之外执行:
<code class="language-sql">DO $do$ BEGIN IF EXISTS (SELECT FROM pg_database WHERE datname = 'mydb') THEN RAISE NOTICE '数据库已存在'; ELSE PERFORM dblink_exec('dbname=' || current_database(), 'CREATE DATABASE mydb'); END IF; END $do$;</code>
此方法需要安装 dblink 模块。
以上是如何仅在 PostgreSQL 数据库尚不存在时创建它?的详细内容。更多信息请关注PHP中文网其他相关文章!