我们使用 Expect 脚本和其他一些命令创建一个 Hive 数据库。
如果我们在已经创建的 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;
^
答案1
如果您想使用 Hive 数据库,请尝试直接使用hive(见下文)
PostgreSQL 答案
堆栈溢出问答模拟 PostgreSQL 的 CREATE DATABASE IF NOT EXISTS?
指定 PostgreSQL 没有内置支持如果不存在(如蜂巢)
其中提到的简单答案之一是:查询数据库,并且只有在查询失败时才创建数据库。
psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'my_db'" | grep -q 1 || psql -U postgres -c "CREATE DATABASE my_db"
蜂巢答案:
您应该使用带有选项的命令[如果不存在]:
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;