2014-05-15 49 views
0

这里我需要使用PostgreSQL中存在于其他数据库表中的函数(存储过程)来选择列名。通过PostgreSQL中的函数从其他数据库表中选择列名

我有SQL服务器查询如下所示。

例子:

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

也许[dblink](http://www.postgresql.org/docs/current/static/dblink.html)可以提供帮助吗? –

+3

Postgres与SQL Server不同。您可能想考虑将不同的数据库从SQL Server移动到Postgres中的不同模式。与其试图将一个设置从一个DBMS“复制”到另一个DBMS,你应该考虑如何在新环境中最好地反映出该设置的基本要求(并在开始编码之前阅读手册) –

+0

@TomasGreif:dblink已被取代由fdw。 – Patrick

回答

2

你的问题不是很清楚,但是如果你想知道某个名字的列是否存在于远程PostgreSQL数据库的某个表中,那么你应该首先设置一个foreign data wrapper,这是一个多阶段过程。然后,为了测试表中特定列的存在,您需要制定一个符合您要连接的特定DBMS标准的查询。使用以达到最佳的兼容性远程information_schema.tables表(在这里指定为remote_tables,你必须有一个事先CREATE FOREIGN TABLE命令定义):如果你想连接到其他类型的DBMS的

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; 

,你需要写一些自定义功能在fi C或perl,然后从本地机器上的PostgreSQL函数中调用它。然后最好在函数内完成对列的测试,函数应该将连接参数,表名和列名作为参数,并返回一个布尔值来通知结果。

你开始测试在此之前,请务必阅读所有的文档上连接到远程服务器和学习PL/pgSQL第一也将是一个很好的姿态,你寻求帮助之前,以证明自己的努力。

+0

非常感谢。 – Meem

+0

还有一个问题请您:我在哪里可以看到外包装表/服务器?谢谢 – Meem

+0

我不明白你的问题。该文档可在线访问;请参阅我的答案中的超链接。一旦定义,外部服务器或fdw本身不像其他对象那样“可见”,但外部表(实际上只是外部关系的本地占位符)可以像其他关系一样被看到。 – Patrick

相关问题