我正在尝试使用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;
每个条目。
有人如何将此简化为单个查询?
答案 0 :(得分:1)
表名不能变; 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();