我的问题是两方面的。首先,我必须评估 PostgreSQL 的版本才能运行正确的查询。DO
我有一些运行 PostgreSQL 8.* 的服务器,它们在下面的查询中使用时遇到问题。我运行 9.* 的服务器(我主要使用 9.2 服务器)给我一个错误“查询没有结果数据的目的地”,而我想要的只是打印出 select 语句。
我的查询:
DO
$BODY$
BEGIN
IF (SELECT setting from pg_settings where name = 'server_version') >= '9.2' THEN
SELECT pg_database.datname AS Database_Name, pg_authid.rolname AS Database_Owner,
pg_authid.rolsuper AS IsSuperUser, pg_tablespace.spcname AS TableSpaceName,
pg_catalog.pg_tablespace_location(pg_tablespace.oid) AS TableSpaceLocation
FROM pg_database
JOIN pg_authid on pg_database.datdba = pg_authid.oid
CROSS JOIN pg_tablespace
WHERE datistemplate = false
AND pg_database.dattablespace = pg_tablespace.oid;
ELSE
SELECT pg_database.datname AS Database_Name, pg_authid.rolname AS Database_Owner,
pg_authid.rolsuper AS IsSuperUser, pg_tablespace.spcname AS TableSpaceName, pg_tablespace.spclocation AS TableSpaceLocation
FROM pg_database
JOIN pg_authid on pg_database.datdba = pg_authid.oid
CROSS JOIN pg_tablespace
WHERE datistemplate = false
AND pg_database.dattablespace = pg_tablespace.oid;
END IF;
END;
$BODY$
所以,如果DO
在 9.0 之前不起作用并且我在 9.0 之后收到错误,我有点坚持我能做些什么来满足这两个条件。