‘壹’ php 查询pgsql遇到一个问题,就是必须在sql末尾加上分号;才能查询出来结果.
这个pgsql必须带结束符;
PostgreSQL数据库使用psql的时候,需要在命令后加上;(分号)或者是g来表示语句已经结束以执行查询;
一般sql语句都是用分号说明sql语句的结束,mysql sqlserver都是,只是可以省略,如果多条sql同时执行,就需要分割。
‘贰’ pgsql使用函数调用和直接使用sql对数据表进行修改有何区别
在SQL server中视图仅仅是SQL的映射,它一般事不含有程序运算,仅用于查询。 自定义函数是程序块,它支持参数,并且返回类型多样化。
数据库一般提供数据存储的作用,业务逻辑运算却由其它应用程序处理,例如JAVA。如果业务逻辑比较复杂而且高度依赖数据库里的各种数据,这样JAVA与数据库之间可能需要通讯多次,才可以把流程完成。这样无疑会产生交互的时间,所以如果把复杂的运算直接让数据库中计算出来,那效率就会相当高,所以就有了自定义函数。
‘叁’ 如何用sql语句查询单据是否审核
IFEXISTS(SELECTTOP11FROM表名WHERE审核字段='审核'AND单号='单号001')
SELECT'已审核'
ELSE
SELECT'未审核'
‘肆’ pgsql怎样创建表,数据库等
打开软件,进入界面中。
双击“PostgresSQL 9.3”连接服务器
方法一:右键单击“postgres”,选择“新建对象”--新建数据库,设置新的数据库的参数,所有者一般默认为“postgres”
新建完后,不能立即看到界面上更新的数据,需要点击界面上的更新按钮才能够看到数据库的变化情况。
方法二:在插件中输入SQL语言,运行命令
方法三:点击面板上的“执行任意的SQL查询”
‘伍’ 求助pgsql 问题待解决
初学postgresql,想安装一个在本机测试一下,环境为windows xp + apache2 + php5(5.2.6) + postgresql8.4.一切安装正常,但是再装上phppgadmin测试时,显示“您的 PHP 中没有完整的数据库支持”。apache错误日志为“PHP Warning: PHP Startup: Unable to load dynamic library 'C:/php/ext/php_pgsql.dll'”。多次在网上搜索解决方法,已完成以下操作:
1、修改php.ini
2、确认C:\php\ext\下php_pgsql.dll存在
3、修改path环境变量,添加了postgresql的bin目录
4、将libpg.dll放至windows\system32下
5、重启apache多次
不好意思,仅有的一点积分已经用光了,所以只好请大家多多支持了。
cmd下,cd到php所在目录,之后在cmd下运行 php 看提示吧,却啥lib它会提示你,需要啥去pgsql下cpoy到windows\system32下,你只复制一个libpg.dll是不够的,好象复制好多个
‘陆’ pgsql查询问题
select * from test where
string_to_array('a,b,c,d,e',',') && arr
or
string_to_array('a,b,c,d,e',',') && list;
‘柒’ 如何自动化完成SQL审核
sql审核主要完成两方面的目的.
1、避免性能太差的sql进入生产系统,导致整体性能降低
2、检查开发设计的索引是否合理,是否需要添加索引
第一点是SQL审核最核心的地方,避免乱七八糟的sql影响线上性能,甚至导致线上系统崩溃.
第二点是属于建模的范畴,要解决建模的最好办法是DBA参与项目前期审核,由DBA建模,如果DBA人力资源不足,那么就定期由DBA对开发人员进行培训.然后发现建模太烂的就扣KPI.
现在很多公司都是人肉来完成SQL审核的,人肉审核对dba的要求较高,需要懂一些代码,另外是费时费力,毕竟一般公司几十个开发,对应一个DBA,而且DBA还要干很多其他的事情.
如何将DBA从人肉SQL审核中解放出来呢?
思路其实很简单:
1、获取程序要执行的SQL
2、对要执行的SQL做分析,可以加各种分析条件来判断这个SQL是否可以自动审核通过,未通过审核的需要人工处理.
3、配合后期的慢查询日志分析系统完成长期的监控.
开源的解决方案主要有淘宝丹臣sqlautoreview系统.可以在github上搜索到.
但是这个系统主要是基于java sqlmapfile.xml解决自动创建索引的问题,对源数据有要求,并且是通过解析SQL结构来假设SQL的执行计划,不是特别准确,并且不能够很好的区分新sql还是老sql.
所以产生了一个新的方案:
1、为所有的执行过的sql产生一个figerprint
2、基于慢查询提供的数据,加上explain 提供的数据来判断这个sql的性能是否可接受,或者可优化.
3、自动审核通过性能可接受的部分,给DBA展示性能较差的sql,然后进行优化.
方案的优点在于:
基于用户真正执行的SQL,并且可以观察SQL执行频率.
基于MySQL真正的执行计划和执行结果,分析更准确.
每个SQL都有一个fingerprint,只需要增量处理新加的SQL,效率和性能提高.
基于Box anemometer二次开发,让慢查询和sql审核同平台,增加工具集成性,提高用户体验(DBA和开发人员)。
方案实施:
既然咱是DBA,肯定会有更DBA的思维方式.基于现有软件二次开发完成,减少开发成本,整合管理平台.
基于Box anemometer.安装Box anemometer
Box anemometer是一款B/S架构,图形化的MySQL慢查询分析工具.功能强大易用,设计简单直接.anemometer是基于pt-query-digest的二次封装得来.
核心处理流程:
mysql node–>计划任务通过pt-query-digest收集慢查询信息–>结果写入到数据库中–>anemometer按条件去展示慢查询的结果,并且提供了图形化和趋势分布图等功能.
所以anemometer已经帮我们完成了数据收集,包括每个sql的fingerprint信息,以及相关的信息,我们在测试环境,基于anemometer,将long_query_time设置为0,就可以收集到所以的SQL及相关信息.
在我们收集到所有SQL以后,我们就要来分析这个SQL是否可以自动审核通过.这里开始我们就要定制了.
定制内容如下:
一、
设置一个单独的datasources,可以命名为audit_sql.
这个datasources里面只放置开发环境或者测试环境的慢查询(你要做sql审核基于哪个环境),将此环境的long_query_time设置为0,接收所有的sql查询.
二、修改anemometer
ALTER TABLE `global_query_review` ADD audit_status VARCHAR(255) NOT
NULL DEFAULT ‘refuse’ comment ‘sql审计的状态 refuse未通过 pass审核通过’;
修改PHP代码.
在report模块的where条件中增加一个Ait Status的选项框,可以过滤audit_status的状态
在show_query模块中增加一个Audit Status的选项框,可以人工设置audit_status的状态
三、增加两个额外的脚本,准实时的分析audit_status为refuse的sql,如果sql的满足自动审核通过的条件,那么就设置audit_status为pass,表示自动审核通过.
自动审核未通过的sql,由DBA人工在anemometer上检索和处理.
这里就涉及到一个自动审核通过的算法:
算法分两种.
第一种是准实时,也就是可以几分钟或者一个小时运行一次,主要是根据每个sql的执行效率判断是否pass.
对应的脚本名字叫做:audit_sql.py
第二种是一天一次,弱化执行效率判断,增加一天执行的频率判断.
对应的脚本名字叫做:audit_sql_day.py
各家根据自己的实际情况调整或者优化这两个脚本.
至此,你已经可以让99%以上的代码自动审核通过了,审核不通过的代码你可以让开发自己来tracking也可以主动推给开发.
对于才搭建的环境,可能会有一些乱七八糟的sql,不过使用一段时间稳定以后,异常的sql指纹都有了,那么每天产生的sql指纹就比较少了,而这部分SQL指纹也就是程序员编写新的代码产生的.
‘捌’ 如何通过SQL语句设置数据库登录审核的状态
刚好上次讲三层架构.有现成的例子
以一个验证登陆为例子
这里是界面层一般叫UIL
protected void Button1_Click(object sender, EventArgs e)
{
List<User> Users = BAL.GetUserInfo(txtUserName.Text,txtPassword.Text);
if(Users.Length > 0)
{
Response.Write("登陆成功");
}
else
{
Response.Write("登陆失败");
}
}
以下是逻辑层代码,业务逻辑层一般叫BLL
public static List<User> GetUserInfo(string user,string password)
{
string newPassword = GetMD5Hash(password); //这里对密码进行加密处理,数据库中存放的是经过MD5加密后的密,业务逻辑层一般都是处理复杂的逻辑.例如加密逻辑
List<User> Users = DAL.GetUserInfo(user,newPassword);
return Users;
}
以下是数据访问层代码,数据访问层一般叫DAL
public static List<User> GetUserInfo(string user,string password)
{
List<User> Users = new List<User>();
string sql = "select * from User where Password = '"+password+"' and User = '"+user+"'"; //写where子句的时候把Password放前面.因为Password经过加密,所以可以防止SQL注入攻击
SqlDataAdapter da = new SqlDataAdapter(sql,"这里是数据库连接字符串");
DataSet ds = new DataSet();
da.Fill(ds);
for(int i=0;i<ds.Tables[0].Rows.Count;i++)
{
User user = new User(ds.Tables[0].Rows[i]["ID"].ToString(),ds.Tables[0].Rows[i]["User"].ToString(),ds.Tables[0].Rows[i]["Password"].ToString());
Users.Add(user);
}
return Users;
}
还会有一个Model层.叫做模板层.是数据表结构的印射.Model层是共用层,其他三层都要用到.
比如数据库中有张表User,里面有3个字段ID,User,Password
那么在模板层中应该有一个类,数据库中User表的一行对应一个User对象,一张表对应User对象的集合.
public class User
{
string ID;
string User;
string Password;
//重载构造函数
User(string id,string user,string password)
{
this.ID=id;
this.User=user;
this.Password=password;
}
}
‘玖’ SQL或者PGSQL数据表里面,根据星期几查询数据
postgres: select * from 表 where extract(dow from 日期字段)=1
sqlserver: select * from 表 where datepart(dw, 日期字段)=2
‘拾’ pgsql比mysql好在哪
Pgsql和Mysql的对比
工作中用过这两个数据库,但都不是太深入,仅限于用而已,但给我留下的印象就是Pgsql更好些,因为这两个库我都遇到过数据丢失的问题,前者我通过网上方法加自己的判断有惊无险地恢复了,而后者搜索各种资料加问身边的专家都没办法。
刚网上搜了一下两者的区别,总体的感觉也是前者是最好的开源关系数据库,而后者是互联网行业应用最广泛的数据库, 可能应用等多发现的坑也多,网上相关资料也多。如果让我个人选没特殊要求情况下会选前者。
关于两个的区别可以看知乎上相关问题,回答很精彩,
其中一个如下。
一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。
二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。
三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。
四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。
五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
六、PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(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复制。