Linux
如何驗證數據庫配置單元已經存在?
我們使用期望腳本和其他一些命令創建一個配置單元數據庫。
如果我們在 hive 已經創建的機器上再次執行 expect 腳本,我們會得到:
錯誤配置單元已存在
我們如何在再次創建之前檢查數據庫配置單元是否已經創建?
通過這個驗證,我們可以逃避期望腳本:
# su - postgres Last login: Sun Aug 13 11:12:03 UTC 2017 on pts/0 -bash-4.2$ psql psql (9.2.13) Type "help" for help. postgres=# CREATE DATABASE hive; ERROR: database "hive" already exists
我的期望腳本:(來自我的 bash 腳本)
set timeout -1 #exec the scripts spawn timeout 60 ssh root@IP expect "#" spawn su - postgres expect "$" send "psql\n" expect "=#" send "CREATE DATABASE hive;\n" . . . .
其他範例:
postgres=# CREATE DATABASE [IF NOT EXISTS] hive; ERROR: syntax error at or near "[" LINE 1: CREATE DATABASE [IF NOT EXISTS] hive; ^
如果您想使用 Hive 數據庫,請嘗試直接使用 hive(見下文)
PostgreSQL 答案
Stack Overflow Q&A模擬 CREATE DATABASE IF NOT EXISTS for PostgreSQL?
指定 PostgreSQL 沒有對IF NOT EXISTS的內置支持(與 hive 一樣)
提到的簡單答案之一是:查詢數據庫,並且只有在查詢失敗時才創建數據庫。
psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'my_db'" | grep -q 1 || psql -U postgres -c "CREATE DATABASE my_db"
蜂巢答案:
您應該使用帶有選項的命令**$$ IF NOT EXISTS $$**:
CREATE DATABASE [IF NOT EXISTS] <database name>
創建數據庫語句
Create Database 是用於在 Hive 中創建數據庫的語句。Hive 中的數據庫是命名空間或表的集合。該語句的語法如下:
CREATE DATABASE|SCHEMA [IF NOT EXISTS] <database name>
這裡,IF NOT EXISTS 是一個可選子句,它通知使用者已經存在同名數據庫。我們可以在此命令中使用 SCHEMA 代替 DATABASE。執行以下查詢以創建名為 userdb 的數據庫:
hive> CREATE DATABASE [IF NOT EXISTS] userdb;
或者
hive> CREATE SCHEMA userdb;