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

Postgres动态构建查询:标识符引号规则及关键词获取咨询

问题

我想要动态构建PostgreSQL查询,其中包含标识符名称。为使输出尽可能可读,我计划仅在必要时为标识符添加引号,并假设用户传入的是准确的标识符名称。
示例输入与理想输出如下:

  • 表名输入:hello,输出:select * from hello
  • 表名输入:Hello,输出:select * from "Hello"(含大写)
  • 表名输入:select,输出:select * from "select"(为关键字)

因此,我希望获取一份即使传入全小写也需加引号的关键字列表,请问PostgreSQL是否有可查询的元表能提供该列表,还是需要基于官方文档硬编码?我认为可查询元表更优,以防后续新增关键字(即便这种情况不太可能带来破坏性变化)。

回答

PostgreSQL确实提供了可直接查询的系统表来获取关键字列表,完全不需要硬编码。你可以通过pg_catalog.pg_keywords系统视图或pg_get_keywords()函数获取完整的关键字信息。

查询方法

  1. 查询pg_keywords视图筛选保留关键字:
SELECT word
FROM pg_catalog.pg_keywords
WHERE catcode = 'R';

这里catcode = 'R'对应的是保留关键字——也就是那些即使全小写也必须加引号才能作为标识符使用的关键字(比如select、from、where等)。其他类别(如catcode = 'U'的非保留关键字)在特定语境外可不用加引号,若只关注必须强制加引号的关键字,仅需筛选R类即可。

  1. 使用pg_get_keywords()函数查询:
SELECT * FROM pg_get_keywords();

该函数返回的结果与pg_keywords视图一致,包含关键字名称、类别代码及类别描述。

补充说明

除了保留关键字,以下两种情况也必须给标识符加引号:

  • 标识符包含大写字母(PostgreSQL默认会将未加引号的标识符转为小写)
  • 标识符包含特殊字符(比如空格、连字符、@等)

用系统表查询的优势完全契合你的需求:自动适配当前PostgreSQL版本的关键字列表,无需手动维护,能应对版本升级带来的关键字变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:15:58