You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL服务器全库中按列名查找特定表?PGAdmin/psql实现

在PostgreSQL中按列名跨库查找对应表

1. 单个数据库内查找指定列所属表

直接查询PostgreSQL标准的信息模式视图information_schema.columns,就能快速定位列所在的表:

SELECT table_catalog AS 数据库名,
       table_schema AS 模式名,
       table_name AS 表名
FROM information_schema.columns
WHERE column_name = '目标列名' -- 替换为你要查找的列名
ORDER BY 数据库名, 模式名, 表名;

如果需要忽略大小写匹配(比如不确定列名大小写),可以用ILIKE替代=:

WHERE column_name ILIKE '目标列名'

2. 遍历所有数据库批量查找

PostgreSQL没有原生跨库查询语法,需要借助psql终端的元命令或脚本实现批量遍历:

方法一:用psql的\gexec元命令自动执行

  1. 登录psql终端(可连接任意数据库,比如默认的postgres库)
  2. 执行以下语句,自动生成并执行所有非模板数据库的查询:
SELECT format(
  'SELECT ''%I'' AS 数据库名, table_schema AS 模式名, table_name AS 表名 FROM %I.information_schema.columns WHERE column_name = ''目标列名'';',
  datname, datname
)
FROM pg_database
WHERE datistemplate = false; -- 过滤系统模板数据库
\gexec
  • 替换语句中的'目标列名'为实际要查找的列名
  • datistemplate = false会排除template0、template1这类系统模板库,只查询用户创建的数据库

方法二:Shell脚本批量处理(适用于Linux/macOS)

如果需要自动化执行,可编写如下Shell脚本:

#!/bin/bash
TARGET_COLUMN="目标列名"
PG_USER="你的PostgreSQL用户名"

# 获取所有非模板数据库列表
DBS=$(psql -U $PG_USER -d postgres -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;")

for DB in $DBS; do
  echo "=== 数据库: $DB ==="
  psql -U $PG_USER -d $DB -c "SELECT table_schema AS 模式名, table_name AS 表名 FROM information_schema.columns WHERE column_name = '$TARGET_COLUMN' ORDER BY 模式名, 表名;"
done
  • 替换TARGET_COLUMN和PG_USER为实际值
  • 给脚本添加执行权限:chmod +x find_tables.sh,然后运行./find_tables.sh

注意事项

  • 如果列名是创建时加了双引号的大小写敏感名称,查询时要把列名用转义双引号包裹,比如WHERE column_name = "\"MySpecialColumn\""
  • 确保执行查询的用户拥有所有目标数据库的information_schema视图访问权限

内容的提问来源于stack exchange,提问作者Julio Marins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:15:14