【问题标题】:psql: warning: extra command-line argument ignoredpsql:警告:额外的命令行参数被忽略
【发布时间】:2021-10-15 03:28:43
【问题描述】:

我正在尝试执行脚本以在 postgres 中创建角色

$PSQL_CLIENT "host=$servername user=$DB_POSTGRES_USERNAME dbname=postgres password='$DB_PASSWORD'"

问题在于密码有 6 个单词,例如 (alpha beta charlie) 和空格,我不允许更改它

我也试过了:

$PSQL_CLIENT "host=$servername user=$DB_USERNAME dbname=postgres password=/"$DB_PASSWORD"/"

每次我尝试连接时都会看到此错误

psql: warning: extra command-line argument "password content" ignored
psql: warning: extra command-line argument "password content" ignored
psql: warning: extra command-line argument "password content" ignored
psql: warning: extra command-line argument "password content," ignored

我认为password=/"$DB_PASSWORD"/" 必须更改某些内容,不确定要正确读取密码究竟需要做什么。任何帮助将不胜感激

【问题讨论】:

    标签: psql


    【解决方案1】:

    正如the documentation 所说:

    要写入空值或包含空格的值,请用单引号将其括起来,例如keyword = 'a value'

    因此,您的命令应该适用于包含空格的密码。如果您的密码包含'\,您仍然会遇到问题,因为

    值中的单引号和反斜杠必须用反斜杠转义,即\'\\

    所以你需要使用

    IFS='' escapedpwd=$(echo "$DB_PASSWORD" | sed -e "s/\([\']\)/\\\\\1/g")
    $PSQL_CLIENT "host=$servername user=$DB_POSTGRES_USERNAME dbname=postgres password='$escapedpwd'"
    

    【讨论】:

    • 我的密码不包含任何 ' 或 \ ,这些只是一些单词,没有特殊字符。仍然尝试了您的建议,它也没有奏效
    • 描述“没用”。发送的密码是什么?使用echo 而不是psql 进行调试。
    • 是的,我确实使用 echo 进行了验证,我是从 aws ssm 参数存储中获取的,唯一的问题是它无法正确读取,并且密码类似于此“alpha beta charlie echo delta xray”用不同的词
    • 也许你的PSQL_CLIENT 是一个shell 脚本,不能很好地转义这些字符串。
    • 感谢您的回复,我通过添加 '${DB_PASSWORD}' 解决了这个问题
    猜你喜欢
    • 2019-11-04
    • 2019-12-02
    • 2023-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2020-03-31
    • 1970-01-01
    • 2012-03-29
    相关资源
    最近更新 更多