做postgres数据库数据同步时,遇到一个很奇怪的问题:在本地时同样的命令完全没有问题,不时权限的问题,

做postgres数据库数据同步时,遇到一个很奇怪的问题:在本地时同样的命令完全没有问题,不时权限的问题,,第1张

两个方面查一下

执行SQL的用户是否有dump权限

shell执行的时候有没有加载用户环境变量   $HOME/bash_profile

一、数据库的多表连接查询,inner的不同用法

在pg数据库中建立两张表:

t_a和t_b如下所示:

t_a:

t_b:

1、inner join(内连接)

inner join就是根据on字段标示出来的条件,查询关联的表中符合条件的数据,并把他前部都显示出来,形成一个结果集。

执行如下语句

select from t_a inner join t_b on t_aadi=t_bbid

得到的结果为:

这样的查询会显示出所有的数据,如果我们仅仅需要一部分的数据(例如我们只想查出t_a中所有aid和t_b中的bid相同的数据),那么查询语句应该变成:

select t_a from t_a inner join t_b on t_aaid=t_bbid

那么得到的数据如下所示,就只显示了t_a表中的数据。如下:

要排除重复的数据,在select后加distinct即可。

2、left join

left join 就是以表t_a为基础从右表t_b中查询出所有符合on条件的结果,在合并到表t_a中对应的部分,再作为一个结果集输出,在结果集中,会显示出表t_a中的所有数据。

执行如下查询语句:

select from t_a left join t_b on t_aaid=t_bbid

得到如下结果:

可以看到,在查询的结果中,有一行关于表t_b的数据都为null,因为表t_b中没有符合on条件的数据。但是表t_a表显示出了全部的数据。那么在需要筛选的时候,应该着重于筛选表t_b中的数据,如果执行如下的语句:

select t_a from t_a left join t_b on t_aaid=t_bbid

那么得到的就是表t_a中的所有数据,那么这个查询就显得没有意义了。

3、right join

right join 就是以表t_b为基础从左表t_a中查询出所有符合on条件的结果,在合并到表t_b中对应的部分,再作为一个结果集输出,在结果集中,会显示出表t_b中的所有数据。

执行如下查询语句:

select from t_a right join t_b on t_aaid=t_bbid

得到的结果为:

可以看到,查询的结果中,有两行数据在表t_a的对应部分都是null的,表示表t_a中没有符合on条件的数据,但是表t_b显示了全部的数据,那么需要做条件筛选的时候,我们就应该主要针对表t_a进行筛选。

二、查询一个父级的所有子级(包括子级的子级)

在pg数据库中建立一张表t_c如下:

要查出cid为1的所有的子级、包括cid为2、3、5的子级的集合。执行以下sql语句

with recursive tb as(select from t_c where parent_id='1' union all select t_c from t_c,tb where t_cparent_id=tbcid )select from tb

得到如下的结果:

由查询出的结果集可以看到,我们查询出了除了父级(cid为1)以外的所有cid为父级的子级以及子级的子级。

我们来解析一下这个sql语句:

显而易见的,这是一个递归的查询方法。首先是with为查询语句提供了辅助功能,可以看做是查询语句中的临时表,其次recursive是sql中递归的关键字,只有有了这个关键字,pg才知道with这个语句需要做递归 *** 作。union all是去重的,t_cparent_id=tbcid 表示了t_c的parent_id要等于临时表tb的cid要在整个with语句的外面查询建立的临时表tb,才能得到所有的子级的集合。

1、在查询的时候一般使用查询代表查询所有字段信息,但表太大就不建议使用这种方式。

2、在查询的时候也可以指定字段进行查询,如下图只查询表中的一部分字段信息。

3、不过最经常使用的查询是指定特殊的条件来进行查询,以便查询结果更为精确。

4、在查询的时候有时也需要对查询结果进行适当的排序,这样可以快速定位要查询数据的结果。

5、在查询的时候也可以指定特殊的查询范围,根据指定的查询范围来查询出特定结果。

以上就是关于做postgres数据库数据同步时,遇到一个很奇怪的问题:在本地时同样的命令完全没有问题,不时权限的问题,全部的内容,包括:做postgres数据库数据同步时,遇到一个很奇怪的问题:在本地时同样的命令完全没有问题,不时权限的问题,、pg数据库的db怎么查看表关联、postgresql数据库怎么查询所有的序列名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9690452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存