使用来自information_schema

时间:2015-07-15 15:27:20

标签: postgresql

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

每个条目。

有人如何将此简化为单个查询?

1 个答案:

答案 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();