You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL命令行查询中正确转义字符?附报错排查

问题解决与优化方案

报错原因与修正

你执行的SQL里WHERE usename LIKE name存在两个问题:

  1. pg_catalog.pg_user表没有名为name的列,正确的用户名列是usename
  2. 如果是要匹配特定用户名,需要把name换成带单引号的字符串;如果要匹配当前会话用户,用内置变量current_user

修正后的示例命令

  • 查询用户名包含postgres的用户:
[servername]# su postgres -c 'psql -c "SELECT * FROM pg_catalog.pg_user WHERE usename LIKE '%postgres%';"'
  • 查询当前登录的数据库用户:
[servername]# su postgres -c 'psql -c "SELECT * FROM pg_catalog.pg_user WHERE usename = current_user;"'

更优雅的命令行查询方式

1. 简化su调用(无需cd)

cd ~是多余的,postgres用户默认家目录已经适配psql,直接执行即可:

su postgres -c 'psql -c "SELECT * FROM pg_catalog.pg_user;"'

2. 直接用psql的-U参数(无需su,需权限配置)

如果你的系统用户有权限以postgres身份连接数据库,可以跳过su,直接用:

psql -U postgres -c "SELECT * FROM pg_catalog.pg_user WHERE usename LIKE '%test%';"

3. 多行SQL更易读(用HEREDOC)

对于复杂查询,用HEREDOC可以避免引号嵌套的麻烦,格式更清晰:

su postgres -c 'psql <<EOF
SELECT usename, usesysid, passwd
FROM pg_catalog.pg_user
WHERE usename NOT LIKE 'postgres';
EOF'

4. 格式化输出

  • 无表头纯文本输出(适合脚本处理):
su postgres -c 'psql -c "SELECT usename FROM pg_catalog.pg_user;" -A -t'
  • 展开式输出(每行显示一个字段):
su postgres -c 'psql -c "SELECT * FROM pg_catalog.pg_user WHERE usename = current_user;" -x'

内容的提问来源于stack exchange,提问作者palmasd1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 01:10:28