php 查询pgsql遇到一个问题,就是必须在sql末尾加上分号;才能查询出来结果.

php 查询pgsql遇到一个问题,就是必须在sql末尾加上分号;才能查询出来结果.,第1张

这个pgsql必须带结束符;

PostgreSQL数据使用psql的时候,需要在命令后加上;(分号)或者是\g来表示语句已经结束以执行查询;

一般sql语句都是用分号说明sql语句的结束,mysql sqlserver都是,只是可以省略,如果多条sql同时执行,就需要分割。

一、数据库的多表连接查询,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,才能得到所有的子级的集合。

数据库架构schema实现了,数据库对象与数据库用户直接映射的分离,用户与数据库对象可以通过schema来映射控制。

数据库对象(视图,表,函数等)可以属于某个schema数据库用户可以属于某个schema,表示拥有某个schema下对象的权限。如果未指定,数据库对象属于架构(schema)dbo,sa用户默认属于dbo架构(dbo:database owner)。当用户访问数据库对象时,如采用serverobjects时默认寻找对应schema下的数据库对象:比如用户tmp_user属于schema:tmp,则上述访问默认转变成:servertmpobjects

创建用户,并指定用户默认的schema:

PgSQL

CREATE LOGIN [User_tmp] WITH PASSWORD = N'123456'

CREATE USER [User_tmp] FOR LOGIN [User_tmp] WITH DEFAULT_SCHEMA = [tenant]

1

2

CREATE LOGIN [User_tmp] WITH PASSWORD = N'123456'

CREATE USER [User_tmp] FOR LOGIN [User_tmp] WITH DEFAULT_SCHEMA = [tenant]

创建scheme:

PgSQL

CREATE SCHEMA [tenant] AUTHORIZATION [dbo]

1

CREATE SCHEMA [tenant] AUTHORIZATION [dbo]

给schema设置权限:

PgSQL

GRANT INSERT, SELECT, UPDATE, DELETE, EXECUTE, REFERENCES ON SCHEMA:: [tenant] TO User_tmp

1

GRANT INSERT, SELECT, UPDATE, DELETE, EXECUTE, REFERENCES ON SCHEMA:: [tenant] TO User_tmp

创建带schema的数据库对象,比如创建一个视图:

PgSQL

CREATE VIEW tenantPrinterCookies

WITH SCHEMABINDING

AS

SELECT ticket_no, user_agent, create_date, create_by

FROM dboPrinterCookies

GO

1

2

3

4

5

6

CREATE VIEW tenantPrinterCookies

WITH SCHEMABINDING

AS

SELECT ticket_no, user_agent, create_date, create_by

FROM dboPrinterCookies

GO

注意:带WITH SCHEMABINDING标记时,如果对应的表做了修改(增加字段除外),需要删除原视图,再去修改对应的物理表,再建带schema的视图。

用户登录时,只显示他所在schema下的所有数据库对象,如上述用户只显示带tenant的对象,无法查看其它dbo的数据库对象。但tenant的所有者是dbo,所以dbo下可以看到所有tenant的对象。

同样的,因为之前给tenant分配了数据库的增,删,改查权限,可以对tenant下的数据对象作相应的 *** 作权限。

当使用下面的SQL语句时:SELECT FROM SqlTestPrinterCookies,当用用户[User_tmp]登录查找时,会匹配到SqlTesttenantPrinterCookies视图对象,而用dbo登录时,会匹配到SqlTestdboPrinterCookies物理表对象。当然,各自查询呈现的数据是不一样的。

综上所述,基于schema的不同,我们可以规约出很多不同的权限。同时,根据schema的默认匹配,可将数据库的物理表逻辑往上层通过schema来管理控制。从而让不同的登录用户,有差别的访问同一个数据库资源,达到数据管理的目的。

一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。

二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(55版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。

三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。

四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的 *** 作,这个和PGSQL的MVCC实现有关系。

五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。

六、PG有极其强悍的 SQL 编程能力(9x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持,腾讯内部数据存储主要是MYSQL,但是数据分析主要是HADOOP+PGSQL。

七、PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便, *** 作非常简单。

八、一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。

九,对于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。

十,pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)

最后说一下我感觉 PG 不如 MySQL 的地方。

第一,MySQL有一些实用的运维支持,如 slow-querylog ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。

第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,

第三点,MySQL的复制可以用多级从库,但是在92之前,PGSQL不能用从库带从库。

第四点,从测试结果上看,mysql 55的性能提升很大,单机性能强于pgsql,56应该会强更多

第五点,对于web应用来说,mysql 56 的内置MC API功能很好用,PGSQL差一些。

另外一些:

pgsql和mysql都是背后有商业公司,而且都不是一个公司。大部分开发者,都是拿工资的。

说mysql的执行速度比pgsql快很多是不对的,速度接近,而且很多时候取决于你的配置。

对于存储过程,函数,视图之类的功能,现在两个数据库都可以支持了。

另外多线程架构和多进程架构之间没有绝对的好坏,oracle在unix上是多进程架构,在windows上是多线程架构。

很多pg应用也是24/7的应用,比如skype 最近几个版本VACUUM基本不影响PGSQL 运行,80之后的PGSQL不需要cygwin就可以在windows上运行。

至于说对于事务的支持,mysql和pgsql都没有问题。

F:\PostgreSQL\92\bin>psqlexe -h localhost -U postgres -d Test -p 5432psql (924)输入 "help" 来获取帮助信息Test=#Test=# help;您正在使用psql, 这是一种用于访问PostgreSQL的命令行界面键入: \copyright 显示发行条款 \h 显示 SQL 命令的说明 \ 显示 pgsql 命令的说明 \g 或者以分号(;)结尾以执行查询 \q 退出注: 数据库名称区分大小写的。使用某些有密码的用户的情况下, 会提示输入密码F:\PostgreSQL\92\bin>psqlexe -h localhost -U test -d Test -p 5432用户 test 的口令:psql (924)输入 "help" 来获取帮助信息Test=#

打开软件,进入界面中。

双击“PostgresSQL 93”连接服务器

方法一:右键单击“postgres”,选择“新建对象”--新建数据库,设置新的数据库的参数,所有者一般默认为“postgres”

新建完后,不能立即看到界面上更新的数据,需要点击界面上的更新按钮才能够看到数据库的变化情况。

方法二:在插件中输入SQL语言,运行命令

方法三:点击面板上的“执行任意的SQL查询”

以上就是关于php 查询pgsql遇到一个问题,就是必须在sql末尾加上分号;才能查询出来结果.全部的内容,包括:php 查询pgsql遇到一个问题,就是必须在sql末尾加上分号;才能查询出来结果.、pg数据库的db怎么查看表关联、在SQL Server里面SCHEMABINDING是什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存