gpt4 book ai didi

postgresql - 使用 shell 检查数据库是否存在于 PostgreSQL 中

转载 作者:行者123 更新时间:2023-11-29 11:04:33 25 4
gpt4 key购买 nike

我想知道是否有人能告诉我是否可以使用 shell 检查 PostgreSQL 数据库是否存在?

我正在制作一个 shell 脚本,我只希望它在数据库不存在时创建它,但到目前为止还没有看到如何实现它。

最佳答案

注意/更新(2021 年):虽然这个答案有效,但从哲学上讲,我同意其他评论,即正确的方法是询问 Postgres

检查其他答案是否有psql -c--command其中更适合您的用例(例如 Nicholas Grilly'sNathan Osman'sbruce'sPedro's variant


我使用 Arturo 解决方案的以下修改:

psql -lqt | cut -d \| -f 1 | grep -qw <db_name>


它做什么

psql -l输出如下:

                                        List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-----------+----------+------------+------------+-----------------------
my_db | my_user | UTF8 | en_US.UTF8 | en_US.UTF8 |
postgres | postgres | LATIN1 | en_US | en_US |
template0 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)

使用简单的方法意味着搜索名为“List”、“Access”或“rows”的数据库将会成功。因此我们通过一系列内置命令行工具将此输出通过管道传输到仅在第一列中进行搜索。


-t标志删除页眉和页脚:

 my_db     | my_user   | UTF8     | en_US.UTF8 | en_US.UTF8 | 
postgres | postgres | LATIN1 | en_US | en_US |
template0 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | LATIN1 | en_US | en_US | =c/postgres +
| | | | | postgres=CTc/postgres

下一位,cut -d \| -f 1通过垂直管道拆分输出 |字符(使用反斜杠从 shell 中转义),然后选择字段 1。这将留下:

 my_db             
postgres
template0

template1


grep -w匹配整个单词,因此如果您正在搜索 temp 则不会匹配在这种情况下。 -q选项会抑制写入屏幕的任何输出,因此如果您想在命令提示符下以交互方式运行它,您可以排除 -q所以会立即显示一些内容。

请注意 grep -w匹配字母数字、数字和下划线,这正是 postgresql 中不带引号的数据库名称中允许的字符集(连字符在不带引号的标识符中是不合法的)。如果您使用其他字符,grep -w不会为你工作。


整个管道的退出状态将为0 (成功)如果数据库存在或1 (失败)如果没有。您的 shell 将设置特殊变量 $?到最后一个命令的退出状态。您还可以在条件中直接测试状态:

if psql -lqt | cut -d \| -f 1 | grep -qw <db_name>; then
# database exists
# $? is 0
else
# ruh-roh
# $? is 1
fi

关于postgresql - 使用 shell 检查数据库是否存在于 PostgreSQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14549270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com