关于postgresql:选择psql数据库中的所有表格除了那些匹配[pattern]

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

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

我希望能够选择所有非引用表(名称更可变,但它们都不以valid开头),但无法弄清楚如何。 我尝试了各种各样的东西,如\dt !valid*\dt !~valid*\dt NOT LIKE 'valid%',但这些错误或找不到匹配。

任何建议,将不胜感激!


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

1
2
3
4
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%';