选择 psql 数据库中的所有表,除了匹配 [pattern] 的表

jac*_*cel 5 postgresql psql

我有一个包含许多表的数据库,这些表用作其他表中有效值的参考。这些引用表都已命名valid[table],因此我可以使用 .psql 在 psql 中显示它们\dt valid*

我希望能够选择所有引用表(它们的命名更加多样,但没有一个以 开头valid),但无法弄清楚如何。我尝试过各种方法,例如\dt !valid*\dt !~valid*\dt NOT LIKE 'valid%',但这些要么出错,要么找不到匹配项。

任何建议,将不胜感激!

Sim*_*stö 4

根据手册,psql支持这些模式。通常,您可以使用正则表达式负向先行(?!valid)*,但?不能在正则表达式 with 中使用psql,因为它被转换为.. 从以下位置进行查询可能更容易INFROMATION SCHEMA

SELECT table_name FROM information_schema.tables
  WHERE table_schema NOT IN ('pg_catalog', 'information_schema') --exclude system tables
    AND table_type = 'BASE TABLE' -- only tables
    AND table_name NOT LIKE 'valid%';
Run Code Online (Sandbox Code Playgroud)