與 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中文網其他相關文章!