PostgreSQL中的跨数据库查询

PostgreSQL中的跨数据库查询,sql,postgresql,cross-database,Sql,Postgresql,Cross Database,我试图在Postgres中构建一个查询。我的背景是SQL Server,所以我在语法方面遇到了一些挑战。我的查询需要访问两个独立服务器上的两个独立数据库。我需要在数据集之间进行连接。本质上,我在db1中有一个包含用户登录活动的表。每次用户登录网站时,都会添加一个条目。在db2上,我有一个包含购买的表。对于每一天,我需要看到:有多少人登录,有多少用户登录购买 我的桌子是这样的: Logins Purchases --------- ------

我试图在Postgres中构建一个查询。我的背景是SQL Server,所以我在语法方面遇到了一些挑战。我的查询需要访问两个独立服务器上的两个独立数据库。我需要在数据集之间进行连接。本质上,我在db1中有一个包含用户登录活动的表。每次用户登录网站时,都会添加一个条目。在db2上,我有一个包含购买的表。对于每一天,我需要看到:有多少人登录,有多少用户登录购买

我的桌子是这样的:

Logins                Purchases
---------             ---------
ID                    User_ID
User_ID               Amount
LoginDate 
如果我的采购表上有一个日期字段,这将很容易。但事实并非如此。因此,目前,我正在尝试以下方法:

SELECT 
  // Somehow get the number of logins for the given day here
  // Somehow I need to get the number of purchases for the given day here      
  TO_CHAR(TO_TIMESTAMP((LoginDate/1000) - 14400), 'MM/DD/YYYY') AS the_day
FROM 
  db1.Logins AS t1,
  db2.Purchases as t2
GROUP BY the_day
ORDER BY the_day;

如何获取Postgres中每天的登录和购买次数?谢谢大家!

PostgreSQL不支持跨数据库查询。大多数想要“跨数据库”查询的人都会使用一个包含多个模式的数据库。我不确定MS-SQL,但MySQL的“数据库”更像PostgreSQL的“模式”


如果需要跨数据库查询,则必须使用DBLink或postgres fdw。或者您可以复制数据—查看Londiste、Slony-I或简单的cronjob。

PostgreSQL不支持跨数据库查询。大多数想要“跨数据库”查询的人都会使用一个包含多个模式的数据库。我不确定MS-SQL,但MySQL的“数据库”更像PostgreSQL的“模式”



如果需要跨数据库查询,则必须使用DBLink或postgres fdw。或者您可以复制数据—查看Londiste、Slony-I或简单的cronjob。

PostgreSQL不支持将两个数据库连接在一起,因此这不仅仅是一个“语法挑战”。您需要研究诸如“dblink”或“外部数据包装器”之类的工具,或者找到一种在服务器之间复制数据的方法,或者在应用程序中从单独的查询中组合数据。是的,外部数据包装器是您想要的,但究竟为什么您的用户与购买的用户位于不同的表中?我看不出这有什么意义sense@RichardHuxton也许用户对多个应用程序有一个单一登录,但每个应用程序都有自己的数据,有单独的备份、限制等。这不是设计这样一个系统的唯一方法,但这并不是完全没有意义的。@IMSoP但你肯定会将用户信息复制到每个数据库中吗?或者从一开始就有某种方式从一个数据库到另一个数据库。@RichardHuxton你怎么知道这不是开始?PostgreSQL没有任何本机支持将两个数据库连接在一起,因此这不仅仅是一个“语法挑战”。您需要研究诸如“dblink”或“外部数据包装器”之类的工具,或者找到一种在服务器之间复制数据的方法,或者在应用程序中从单独的查询中组合数据。是的,外部数据包装器是您想要的,但究竟为什么您的用户与购买的用户位于不同的表中?我看不出这有什么意义sense@RichardHuxton也许用户对多个应用程序有一个单一登录,但每个应用程序都有自己的数据,有单独的备份、限制等。这不是设计这样一个系统的唯一方法,但这并不是完全没有意义的。@IMSoP但你肯定会将用户信息复制到每个数据库中吗?或者从一开始就有某种方式从一个到另一个。@RichardHuxton你怎么知道这不是开始?SQL Server有点两者兼而有之。数据库和模式与Postgres中的基本相同,只是您可以在那里进行跨数据库查询,而无需任何额外设置。我真希望我们在PostgreSQL中也可以这样做。但要做到这一点,需要封装大量当前的全局数据结构,并为查询添加一个全新的上下文层。在许多其他复杂情况中。我认为这不会发生。例如,像
pg_class
这样的目录都是通过syscache查找而不是直接关系读取来访问的。许多代码希望能够通过syscache查找找到数据类型、关系定义等。syscache必须通过数据库oid来设置名称空间条目,所有内容都需要设置为传递
(dboid,reloid)
,当前它只传递关系oid,等等。很混乱。我担心,由于时间的推移,这个答案变得很奇怪,因为postgres已经有效地添加了一些功能来访问数据库another@Victor真正地什么?这些选项与多年来一直使用的选项相同-使用
postgres\u fdw
dblink
SQL Server在某种程度上两者兼而有之。数据库和模式与Postgres中的基本相同,只是您可以在那里进行跨数据库查询,而无需任何额外设置。我真希望我们在PostgreSQL中也可以这样做。但要做到这一点,需要封装大量当前的全局数据结构,并为查询添加一个全新的上下文层。在许多其他复杂情况中。我认为这不会发生。例如,像
pg_class
这样的目录都是通过syscache查找而不是直接关系读取来访问的。许多代码希望能够通过syscache查找找到数据类型、关系定义等。syscache必须通过数据库oid来设置名称空间条目,所有内容都需要设置为传递
(dboid,reloid)
,当前它只传递关系oid,等等。很混乱。我担心,由于时间的推移,这个答案变得很奇怪,因为postgres已经有效地添加了一些功能来访问数据库another@Victor真正地什么?这些选项与多年来一直使用的选项相同-使用
postgres\u fdw
dblink