PostgreSQL可以在两个SQL Server存储过程之间执行连接吗?

tbo*_*one 1 sql database sql-server postgresql foreign-data-wrapper

这个问题与前面的问题有关:为什么从关系数据库中不支持的存储过程中进行选择?

在SQL Server,则无法执行连接(或从选择)存储过程(请注意:一个存储过程是从一个完全不同的功能(在SQL Server术语表值函数) -一个功能,你知道列在设计时返回,但是使用一个过程,直到运行时才知道要返回的特定列).

对于SQL Server,确实存在"DBA通常不允许"的方法,可以实现这样的连接:OPENROWSET

所以问题是:

  1. PostgreSQL可以在两个程序之间执行连接,直到运行时才能知道这些列吗?

  2. 它可以做同样的事情,除了使用驻留在外部第三方数据库中的存储过程(可能通过外部数据包装器或其他一些机制)?

Erw*_*ter 5

  1. PostgreSQL可以在两个程序之间执行连接,其中直到运行时才知道列?

基本答案很简单,因为Postgres 目前没有存储过程(直到Postgres 10),只有函数 - 它提供的功能几乎但不完全相同,正如你在问题中所阐述的那样.

并且任何函数都可以像任何其他表一样FROMSELECT查询的子句中使用.

更新:
SQL程序("存储过程")引入在Postgres 11.
为手动CREATE PROCEDURE.

SQL本身要求在运行时知道返回类型.有一个边框大小写:您可以使用多态类型使用函数调用声明返回类型.这里有详细说明(最后一章与您最相关):

  1. 它可以做同样的事情,除了使用驻留在外部第三方数据库中的存储过程(可能通过外部数据包装器或其他一些机制)?

基于同样的原则,这也是一个NO.如果使用外部表,则必须以一种或另一种方式提供明确定义的返回类型.

也许能够从一个SQL Server的存储过程导致整排放到一个单一制表符分隔文本表示,但后来(除了是容易出错且效率低下),你有一列,需要定义的元信息各列提取列的一种或另一种方法 - 捕获22.

  • 即使在SQL Server中,如果需要连接,一个*不应该*使用存储过程,而是使用视图或函数.DBA不喜欢OPENROWSET是有原因的 - 这意味着必须将结果转储到某处并在没有索引的情况下进行查询 (4认同)