Linux

如何驗證數據庫配置單元已經存在?

  • August 21, 2017

我們使用期望腳本和其他一些命令創建一個配置單元數據庫。

如果我們在 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;

引用自:https://unix.stackexchange.com/questions/385841