【问题标题】:Sql in bash script (postgres)bash 脚本中的 Sql (postgres)
【发布时间】:2021-10-21 09:02:44
【问题描述】:

我在 bash 脚本中有一个命令用于重命名基础。 这是工作,示例

psql -U $User -t -A -q -c 'ALTER DATABASE "Old_Name" 重命名为 "New_Name"'

但如果我这样做 -

O_Name='Old_Name'

N_Name='New_Name'

psql -U $User -t -A -q -c 'ALTER DATABASE "$O_Name" 重命名为 "$N_Name"'

这是行不通的,我认为 sql 得到 $O_Name 而不是 Old_Name。 如何将变量bash的值传递给sql?

【问题讨论】:

    标签: linux postgresql bash variables script


    【解决方案1】:

    单引号不允许环境变量扩展。改用双引号(并转义嵌套引号)。喜欢,

    psql -U $User -t -A -q -c "ALTER DATABASE \"$O_Name\" RENAME TO \"$N_Name\""
    

    【讨论】:

    • 我认为它可以工作,但我得到 ERROR: Column "Old_Name" does not exist in > psql -U $UserDB -t -A -q -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid pg_backend_pid() AND datname = \"$Old_Name\"" 我认为这很正常,删除所有连接并重命名base。重命名作品。
    • 但是为什么它被称为“错误”而不是“警告”。不明白。谢谢你。 :)
    • 很难说,但是如果你重命名了数据库,那么你应该得到一个旧名称的错误测试 - 因为旧名称不再存在。
    • Find AND datname = \"$Old_Name\"" 需要发送 datname = 'MyName' with '.psql -U $UserDB -t -A -q -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid pg_backend_pid() AND datname = '$Old_Name'" 这项工作)
    猜你喜欢
    • 2016-01-28
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多