sql - PostgreSQL 函数返回“查询没有结果数据的目的地”
问题描述
我写了这个函数:
CREATE OR REPLACE FUNCTION select_all_sessions(rettype anyelement, dbname varchar(30))
RETURNS SETOF anyelement AS $$
DECLARE
sess VARCHAR;
BEGIN
FOR sess IN SELECT session
FROM dblist
LOOP
IF EXISTS (SELECT *
FROM pg_database
WHERE datname = sess) THEN
SELECT dblink_connect('dblinktest' || sess, 'host=localhost port=5432 dbname=' || sess || ' user=postgres password=password');
SELECT *
FROM dblink('dblinktest'||sess,
'SELECT * FROM ' || dbname || ';');
END IF;
END LOOP;
END;
$$ LANGUAGE plpgsql;
这意味着要在一个服务器上运行,其中有多个数据库,里面有相同的表。表 dblist 包含服务器上存在的所有数据库,但其中一些可能不再存在,所以我必须在使用 dblink 之前检查它是否存在。目标是一次查询所有数据库中的表。创建函数查询有效,但是当我尝试使用该函数时,它说“查询没有结果数据的目的地。”。我是 PL/PGSQL 世界的新手,请帮助 :(
解决方案
尝试不dblink_connect()
带SELECT
. 并将查询的结果添加到返回的结果中,并在末尾添加RETURN QUERY
一个 final (参见“40.6.1.2.和”)。RETURN
RETURN NEXT
RETURN QUERY
CREATE OR REPLACE FUNCTION select_all_sessions(rettype anyelement, dbname varchar(30))
RETURNS SETOF anyelement AS $$
DECLARE
sess VARCHAR;
BEGIN
FOR sess IN SELECT session
FROM dblist
LOOP
IF EXISTS (SELECT *
FROM pg_database
WHERE datname = sess) THEN
dblink_connect('dblinktest' || sess, 'host=localhost port=5432 dbname=' || sess || ' user=postgres password=password');
RETURN QUERY SELECT *
FROM dblink('dblinktest'||sess,
'SELECT * FROM ' || dbname || ';');
END IF;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
推荐阅读
- javafx - JavaFX TableView 选定单元格
- javascript - 为什么 react-router-dom 不会在点击时更改 URL?
- ios - 来自 ViewController 的 UITableView reloadData(),扩展名为 UITableViewDataSource、UITableViewDelegate
- mongodb - 如何使用 Docker 为每个服务创建一个 mongo 数据库
- c# - 添加 Timeline.DesiredFrameRate 后,故事板动画无法在 WPF 中暂停
- sql - 如何从eclipse氧气连接sql server 2017
- ios - 合并冲突核心数据
- javascript - 为什么在向根工作区 package.json 添加依赖项时纱线会发出警告
- apache-kafka-streams - 将 kafka-streams 表存储在数据存储中
- java - 如何在 jGit 中使用 fetch 命令?