在 PostgreSQL 中,如果你想查询表名本身包含特定字符串(例如 tablename)的表,可以使用 LIKE 操作符配合系统表或信息模式。

这里有两种最常见的场景,请根据你的实际需求选择:

场景一:模糊查询(查找表名中包含 “tablename” 字符串的表)
如果你是想找名字里带有 “tablename” 这个词的表(比如 user_tablename, tablename_log 等):

方法 1:使用 information_schema (推荐,标准且易读)
SELECT
table_schema,
table_name
FROM
information_schema.tables
WHERE
table_name LIKE ‘%tablename%’ – 包含 ‘tablename’
AND table_type = ‘BASE TABLE’ – 只查普通表,排除视图
AND table_schema NOT IN (‘pg_catalog’, ‘information_schema’); – 排除系统表

说明:将 %tablename% 中的 tablename 替换为你想要搜索的关键词。
% 是通配符,表示任意字符。
LIKE ‘%abc%’ 表示名字中间包含 abc。
LIKE ‘abc%’ 表示以 abc 开头。
LIKE ‘%abc’ 表示以 abc 结尾。

方法 2:使用 pg_catalog (底层,速度更快)
SELECT
n.nspname AS schema_name,
c.relname AS table_name
FROM
pg_class c
JOIN
pg_namespace n ON n.oid = c.relnamespace
WHERE
c.relname LIKE ‘%tablename%’
AND c.relkind = ‘r’ – ‘r’ 代表普通表
AND n.nspname NOT IN (‘pg_catalog’, ‘information_schema’);

场景二:精确查询(查找表名完全等于 “tablename” 的表)
如果你是想确认数据库中是否存在一张名字叫 tablename 的表:

SELECT
table_schema,
table_name
FROM
information_schema.tables
WHERE
table_name = ‘tablename’ – 完全匹配
AND table_type = ‘BASE TABLE’;

💡 重要提示:大小写问题
PostgreSQL 对标识符的大小写处理规则如下:
默认情况:如果你建表时没加双引号(如 CREATE TABLE mytable …),PostgreSQL 会自动把名字转为小写存储。
查询时:WHERE table_name = ‘mytable’ (必须用小写)。
如果你用 WHERE table_name = ‘MyTable’,将查不到。
强制大写/混合大小写:如果你建表时加了双引号(如 CREATE TABLE “MyTable” …),名字会按原样存储。
查询时:必须严格匹配大小写,即 WHERE table_name = ‘MyTable’。

建议:如果在模糊查询中找不到结果,尝试将搜索词改为小写再试一次(例如 ‘%tablename%’)。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐