通过PostgreSQL中的函数从其他数据库表中选择列名

时间:2014-05-15 07:45:19

标签: postgresql

这里我需要使用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中做同样的事吗?

1 个答案:

答案 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 也是一个很好的姿态在你寻求帮助之前展示自己的努力。