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

如何用PostgreSQL正则过滤指定表并实现记录去重

解决方案

正则匹配规则

用负向后行断言排除schema以_inc结尾的表,正则表达式如下:

^[a-z0-9_]+(?<!_inc)\.[a-z0-9_]+$
  • ^[a-z0-9_]+:匹配schema部分的合法字符(PostgreSQL标识符允许字母、数字、下划线)
  • (?<!_inc):负向后行断言,确保schema的结尾不是_inc
  • \.[a-z0-9_]+$:匹配表名部分,以点号分隔,直到字符串结尾

PostgreSQL 实现示例

假设你已通过正则提取出所有表名记录,可通过以下SQL完成过滤+去重:

SELECT DISTINCT table_name
FROM (
    -- 替换成你原本提取表名的查询语句
    SELECT unnest(regexp_matches(your_sql_content, '\b([a-z0-9_]+\.[a-z0-9_]+)\b', 'g')) AS table_name
) extracted_tables
WHERE table_name ~ '^[a-z0-9_]+(?<!_inc)\.';
  • regexp_matches配合g标志提取所有匹配的表名,unnest将数组转为行记录
  • WHERE子句用正则过滤掉schema带_inc后缀的记录
  • DISTINCT直接对剩余表名去重,保留唯一记录

补充说明

  1. 如果SQL中存在大小写混合的标识符,需在正则中加入i标志(如'gi'),或调整正则为^[A-Za-z0-9_]+(?<!_inc)\.[A-Za-z0-9_]+$
  2. 若表名包含双引号包裹的特殊字符,需要调整正则适配,但PostgreSQL常规标识符一般仅包含字母、数字、下划线

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:20:03