这里我需要使用PostgreSQL使用其他数据库表中存在的函数(存储过程)来选择列名。
我有sql server查询,如下所示。
示例:
create procedure sp_testing
as
if not exists ( select ssn from testdb..testtable) /*ssn is the column-name of testtable which exists in testdb database */
...
问:我可以在PostgreSQL中做同样的事吗?
答案 0 :(得分:2)
您的问题不是很清楚,但如果您想知道某个名称中的某个列是否存在于远程PostgreSQL数据库中某个名称的表中,那么您应首先设置foreign data wrapper,这是一个多阶段的过程。然后,要测试表中某个列的存在,您需要制定一个符合您要连接的特定DBMS标准的查询。使用远程information_schema.tables
表以获得最佳兼容性(此处指定为remote_tables
,您必须使用先前的CREATE FOREIGN TABLE
命令定义它):
CREATE FUNCTION sp_testing () AS $$
BEGIN
PERFORM *
FROM remote_tables
WHERE table_name = 'testtable'
AND column_name = 'ssn';
IF NOT FOUND THEN
...
END IF;
END;
$$ LANGUAGE plpgsql;
如果要连接到其他类型的DBMS,则需要在f.i中编写一些自定义函数。 C或perl然后从本地计算机上的PostgreSQL函数中调用它。然后对函数内部的测试最好在函数内部进行,因此应该将连接参数,表名和列名作为参数,并返回一个布尔值来通知结果。
在开始测试之前,确保您在连接到远程服务器时阅读了所有文档并首先学习 PL/pgSQL 也是一个很好的姿态在你寻求帮助之前展示自己的努力。