gpt4 book ai didi

postgresql - 使用 information_schema 中的表和列执行查询

转载 作者:行者123 更新时间:2023-11-29 13:27:19 25 4
gpt4 key购买 nike

我正在尝试使用 information_schema.columns 查找数据库中所有具有几何类型的列,然后检查这些列中数据的 SRID。

我可以通过多个查询来做到这一点,首先找到表名和列名

SELECT table_name, column_name
FROM information_schema.columns
WHERE udt_name = 'geometry';

然后(手动)

SELECT ST_SRID(column_name)
FROM table_name;

对于每个条目。

有人知道如何将其简化为单个查询吗?

最佳答案

表名不能可变; Postgres 需要能够在知道参数值之前提出一个执行计划。所以您不能在简单的 SQL 语句中执行此操作。

相反,您需要使用过程化语言(如 PL/pgSQL)构建动态查询字符串:

CREATE FUNCTION SRIDs() RETURNS TABLE (
tablename TEXT,
columnname TEXT,
srid INTEGER
) AS $$
BEGIN
FOR tablename, columnname IN (
SELECT table_name, column_name
FROM information_schema.columns
WHERE udt_name = 'geometry'
)
LOOP
EXECUTE format(
'SELECT ST_SRID(%s) FROM %s',
columnname, tablename
) INTO srid;
RETURN NEXT;
END LOOP;
END
$$
LANGUAGE plpgsql;

SELECT * FROM SRIDs();

关于postgresql - 使用 information_schema 中的表和列执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31434655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com