我正在编写一个使用 psql(Postgresql)的 bash 脚本。
DATABASE='scifi'
sudo -u postgres psql
count=SELECT COUNT(*) FROM (SELECT datname FROM pg_catalog.pg_database WHERE lower(datname)=lower($DATABASE)
如果存在的话,我想删除数据库,然后以相同的名称重新创建并分配给用户。
还有与 psql 相关的其他操作。
我的问题是,一旦我进入 psql,我就无法传递 bash 命令并检索信息。我有点理解为什么(因为我正在从 bash 转到 psql),但我必须找到解决方案。
答案1
您可以使用将单个命令作为字符串传递-c
,或者通过标准输入传递更复杂的命令序列,例如使用此文档:
sudo -u postgres psql << EOF
SELECT COUNT(*) FROM (
SELECT datname FROM pg_catalog.pg_database
WHERE lower(datname)=lower($DATABASE)
)
EOF
您可能需要引用或转义*
您不想扩展的 shell 特殊字符。
要捕获结果,请使用 shell 的$(...)
命令替换句法:
count=$(sudo -u postgres psql << EOF
SELECT COUNT(*) FROM (
SELECT datname FROM pg_catalog.pg_database
WHERE lower(datname)=lower($DATABASE)
)
EOF
)