我对最近添加的一些Postgres功能感到非常兴奋,比如外国数据包装器。我不知道有任何其他RDBMS有这个功能,但在我尝试向我的主客户端说明他们应该开始更喜欢Postgres而不是他们当前的RDBMS鸡尾酒,并且在我的情况下包括没有其他数据库可以做到这一点,我想验证一下。
我一直无法找到支持SQL / MED的任何其他数据库的证据,以及这句简短说明Oracle does not support SQL/MED的内容。
让我怀疑的主要问题是对http://wiki.postgresql.org/wiki/SQL/MED的陈述:
SQL / MED是外部数据管理,是SQL标准的一部分,用于处理数据库管理系统如何集成存储在数据库外部的数据。
如果FDW基于SQL / MED,并且SQL / MED是开放标准,那么其他RDBMS似乎也可能实现了它。
除Postgres之外的任何数据库是否都支持SQL / MED?
答案 0 :(得分:8)
PostgreSQL社区有很多不错的FDW,如noSQL FDW(couchdb_fdw,mongo_fdw,redis_fdw),Multicorn(用于使用Python输出而不是C用于包装器本身),或者坚果PGStrom (它使用GPU进行某些操作!)
答案 1 :(得分:3)
SQL Server具有Linked Servers
(http://technet.microsoft.com/en-us/library/ms188279.aspx)的概念,它允许您通过索引服务提供程序连接到外部数据源(Oracle,其他SQL实例,Active Directory,文件系统数据,等等,如果你真的需要,你可以创建自己的Providers
,可以被SQL Server链接服务器使用。
SQL Server中的另一个选项是CLR
,您可以在其中编写代码以根据需要从Web服务或其他数据源检索数据。
虽然这在技术上可能不是“SQL / MED”,但似乎也可以完成同样的事情。
使用本地表连接到4部分链接服务器查询的分布式查询。我认为remotetable
过滤器可能在整个表被拉到本地之后才会被应用(文档对此很模糊,我发现文章有相互矛盾的意见):
SELECT *
FROM LocalDB.dbo.table t
INNER JOIN LinkedServer1.RemoteDB.dbo.remotetable r on t.val = r.val
WHERE r.val < 1000
;
使用OpenQuery,只要将过滤器传递给OpenQuery 2nd参数,就会在远程服务器上应用remotetable
过滤器:
SELECT *
FROM LocalDB.dbo.table t
INNER JOIN OPENQUERY(LinkedServer1, 'SELECT * FROM RemoteDB.dbo.remotetable r WHERE r.val < 1000') r on t.val = r.val