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

Select all tables in psql database EXCEPT those matching [pattern]

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

显示它们

我希望能够 select 所有 参考表(它们的名称更多变,但 none 它们开始使用 valid),但无法弄清楚如何。我尝试了各种方法,例如 \dt !valid*\dt !~valid*\dt NOT LIKE 'valid%',但这些要么出错,要么找不到匹配项。

如有任何建议,我们将不胜感激!

根据手册,psql支持these patterns。通常,您可以使用正则表达式负前瞻 (?!valid)*,但 ? 不能用于带有 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%';