我正在尝试使用 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/