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%';
我有一个包含许多表的数据库,这些表用作其他表中有效值的参考。这些引用表都命名为 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%';