显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL research

公益是一辈子的事, I'm 德哥@Digoal, Just Do it!

 
 
 
 
 
 
为了让跟多的朋友了解PostgreSQL, 我将这些年对PG的使用和研究做成了一些体系的培训视频和一些专题视频.(免费观看和下载)

希望通过这些视频帮到一些朋友, 同时对视频中的错误点烦请读者指出以更正, 谢谢.

目前在更新的视频是<PostgreSQL 数据库管理 5天>和<PostgreSQL 性能优化 3天>.

在线观看地址 :

http://www.tudou.com/home/digoal/

培训视频源文件以及文档下载地址 : 

http://pan.baidu.com/share/home?uk=1982970774#category/type=0

转载请注明出处.

针对一些网友的反馈, 重新设计的培训内容如下, 由浅入深, 适合不同的人群. 包含

<PostgreSQL发展历程,社区介绍,资源介绍 2小时>

<PostgreSQL SQL基础 2天>

<PostgreSQL 数据库管理 3天>

<PostgreSQL 数据库备份与恢复, 数据复制, 负载均衡与高可用 3天>

作者  | 2014-2-22 10:19:30 | 阅读(12001) |评论(59) | 阅读全文>>

[置顶] 给PostgreSQL爱好者的参考资料

2011-8-21 8:32:39 阅读55607 评论32 212011/08 Aug21

推荐书籍:

概念书籍:

《PostgreSQL Introduction and Concepts》

开发书籍:

《PostgreSQL开发必备参考手册》

管理类书籍:

《PostgreSQL 9 Administration Cookbook》

《PostgreSQL 9.0 High Performance》

《PostgreSQL Server Programming》

《How PostgreSQL Processes a Query》

了解内核 :

http://www.postgresql.org/developer/backend/

http://wiki.postgresql.org/wiki/Backend_flowchart

《数据库查询优化器的艺术:原理解析与SQL性能优化》 - 海翔老师

《 PostgreSQL 内核分析》 - 彭老师

官方手册:

作者  | 2011-8-21 8:32:39 | 阅读(55607) |评论(32) | 阅读全文>>

PostgreSQL pg_stat_ssl 视图 patch

2016-2-5 11:03:44 阅读54 评论0 52016/02 Feb5

PostgreSQL 9.6的patch,允许用户查看backend的连接信息,如果是SSL连接,输出SSL版本,cipher算法,加密比特位,是否压缩,DNS等信息。

Table 27-6. pg_stat_ssl View

ColumnTypeDescriptionpidintegerProcess ID of a backend or WAL sender processsslbooleanTrue if SSL is used on this connectionversiontextVersion of SSL in use, or NULL if SSL is not in use on this connectionciphertextName of SSL cipher in use, or NULL if SSL is not in use on this connectionbitsintegerNumber of bits in the encryption algorithm used, or NULL if SSL is not used on this connectioncompressionbooleanTrue if SSL compression is in use, false if not, or NULL if SSL is not in use on this connectionclientdntextDistinguished Name (DN) field from the client

作者  | 2016-2-5 11:03:44 | 阅读(54) |评论(0) | 阅读全文>>

PostgreSQL wal receiver 统计信息 patch

2016-2-5 10:43:01 阅读23 评论0 52016/02 Feb5

之前写过一篇文档,关于如何编写一个C函数,在PostgreSQL hot standby中获取wal receiver的统计信息,以及上游节点的连接信息(conninfo)。

http://blog.163.com/digoal@126/blog/static/1638770402015744524871/

PostgreSQL 9.6 把这个功能合到内核了。

patch地址如下:

http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=b1a9bad9e744857291c7d5516080527da8219854

https://commitfest.postgresql.org/8/447/

主要新增代码:

为了保证取出状态的一致性,需要对&walrcv->mutex加锁。

作者  | 2016-2-5 10:43:01 | 阅读(23) |评论(0) | 阅读全文>>

PostgreSQL Oracle 兼容性之 - WM_SYS.WM_CONCAT

2016-2-4 16:01:12 阅读30 评论0 42016/02 Feb4

Oracle行转列函数WMSYS.WM_CONCAT的使用实例demo

select * from itlife365_course a where name= '张三';

name 课程 score

张三 数学 99

张三 语文 89

张三 英语 93

上面的场景可用WMSYS.WM_CONCAT(a.name)把二行中的[课程]字段的值用","连接起来

如:

select name, to_char(WMSYS.WM_CONCAT(a.课程)) from itlife365_course a where name= '张三' group by a.name;

注意:因为用WMSYS.WM_CONCAT转出的类型是clob的,所以我这用了to_char转了一下。

使用wmsys.wm_concat多列合成一列遇到问题

ORA-22813: 操作数值超出系统的限制

官方文档解释是总长度超过30k

请使用其他方法替代。

PostgreSQL使用string_agg聚合函数即可达到同样的目的: select name, string_agg(a.课程, ',') from itlife365_course a where name= '张三' group by a.name;

如果用户不想改代码,可以尝试自行创建一个名为WM_CONCAT的聚合函数,例子如下:

作者  | 2016-2-4 16:01:12 | 阅读(30) |评论(0) | 阅读全文>>

PostgreSQL Oracle兼容性之 - 函数 自治事务 的实现

2016-2-3 21:08:20 阅读43 评论0 32016/02 Feb3

使用Oracle的用户,在函数中如果使用了自治事务的话,如果要转到PostgreSQL会遇到很棘手的问题。

因为PostgreSQL的函数是作为一个事务来处理的,要么全部提交,要么全部回滚,除了exception,每个exception是一个子事务。

使用并行或嵌套block和exception可以达到自治事务的目的。

建议使用例子2的用法。

例子1 :

单个block的用法:  

你可以将原来函数中的block拆解成一个个小的函数,当然不拆解成小函数也可以的,就是这里的代码量会更大一点。

例如 :

declare trace int; 其他变量定义; begin -- block 1,需要流转的变量通过参数传入下面的函数 select func1(...) into ...; trace = 1; -- 说明block 1的部分已经成功执行了。 -- block 2,需要流转的变量通过参数传入下面的函数 select func2(...) into ...; trace = 2; -- 说明block 2的部分已经成功执行了。 ...... -- block n,需要流转的变量通过参数传入下面的函数 select funcn(...) into ...; trace = n; -- 说明block n的部分已经成功执行了。 ...... -- 如果在接下来的block执行失败,会跳到异常处理部分,在异常处理中,通过tr

作者  | 2016-2-3 21:08:20 | 阅读(43) |评论(0) | 阅读全文>>

EnterpriseDB & PostgreSQL RLS & Oracle VPD

2016-2-3 0:01:54 阅读62 评论0 32016/02 Feb3

PostgreSQL 9.5的RLS用法请参照

http://blog.163.com/digoal@126/blog/static/16387704020153984016177/

EnterpriseDB的RLS用法略有差别,因为EDB主要为Oracle兼容性做了很多适配,用法和Oracle的VPD用法相似,调用DBMS_RLS.add_policy来实现RLS。

详细的用法参照:

http://www.enterprisedb.com/docs/en/9.5/oracompat/Database_Compatibility_for_Oracle_Developers_Guide.1.201.html#pID0E0D5J0HA

例子:

postgres=> create table test(id int, info text, rol name);

创建一个策略,

作者  | 2016-2-3 0:01:54 | 阅读(62) |评论(0) | 阅读全文>>

PostgreSQL 子事务 id & command id 溢出问题分析

2016-2-2 20:01:56 阅读57 评论0 22016/02 Feb2

PostgreSQL 需要为每个savepoint或者函数的exception section分配子事务号,递增。

即使这个exception没有被触发,也需要一个子事务号。

PushTransaction@src/backend/access/transam/xact.c

/*

* Assign a subtransaction ID, watching out for counter wraparound.

*/

currentSubTransactionId += 1;

if (currentSubTransactionId == InvalidSubTransactionId)

{

currentSubTransactionId -= 1;

pfree(s);

ereport(ERROR,

(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),

errmsg("cannot have more than 2^32-1 subtransactions in a transaction")));

}

command id则是记录一个事务中产生写操作(例如ddl,dml)的SQL ID,递增。

CommandCounterIncrement@src/backend/access/transam/xact.c

if (currentCommandIdUsed)

作者  | 2016-2-2 20:01:56 | 阅读(57) |评论(0) | 阅读全文>>

PostgreSQL 非主键非唯一约束列,如何保证唯一性

2016-1-29 9:57:56 阅读390 评论0 292016/01 Jan29

在没有唯一约束或者主键约束时,数据库是不保证唯一性的。那么有什么手段来保证呢?

方法 1. 串行操作,先查询,如果没有查到记录,则插入。

这种方法效率非常低:

测试如下:

postgres=# create table tbl(c1 text);

CREATE TABLE

postgres=# create index idx_c1 on tbl(c1);

CREATE INDEX

postgres=# create or replace function load(v_c1 text) returns void as $$

declare

begin

perform 1 from tbl where c1=v_c1 limit 1;

if found then

return;

else

insert into tbl(c1) values (v_c1);

end if;

end;

$$ language plpgsql strict;

CREATE FUNCTION

压测:

vi test.sql

\setrandom c1 1 50000

select load(:c1);

pgbench -M prepared -n -r -P 1 -f test.sql -c 1 -j 1 -T 100

作者  | 2016-1-29 9:57:56 | 阅读(390) |评论(0) | 阅读全文>>

查看Greenplum和PostgreSQL 发行版本的编译参数

2016-1-26 17:55:04 阅读106 评论0 262016/01 Jan26

通过pg_config可以看到PG的一些库目录,编译器,预编译FLAG,等等:

BINDIR = /home/digoal/pgsql9.5/bin

DOCDIR = /home/digoal/pgsql9.5/share/doc

HTMLDIR = /home/digoal/pgsql9.5/share/doc

INCLUDEDIR = /home/digoal/pgsql9.5/include

PKGINCLUDEDIR = /home/digoal/pgsql9.5/include

INCLUDEDIR-SERVER = /home/digoal/pgsql9.5/include/server

LIBDIR = /home/digoal/pgsql9.5/lib

PKGLIBDIR = /home/digoal/pgsql9.5/lib

LOCALEDIR = /home/digoal/pgsql9.5/share/locale

MANDIR = /home/digoal/pgsql9.5/share/man

SHAREDIR = /home/digoal/pgsql9.5/share

SYSCONFDIR = /home/digoal/pgsql9.5/etc

PGXS = /home/digoal/pgsql9.5/lib/pgxs/src/makefiles/pgxs.mk

作者  | 2016-1-26 17:55:04 | 阅读(106) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 

浙江省 杭州市 狮子座

 发消息  写留言

 
PostgreSQL 高校实验室,企业,社区大联盟才是未来的方向.
 
QQ276732431
E-Mail digoal@126.com
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 

日志分类

 
 
日志分类列表加载中...
 
 
 
 
 

FlagCounter

 
 
模块内容加载中...
 
 
 
 
 

新浪微博

 
 
模块内容加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 
 
心情随笔列表加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016

GACHA-动漫萌妹汇集地

二次元同好交流新大陆

扫码下载App

LOFTER-最美图片社交

汇聚2000万达人的兴趣社区
下载即送20张免费照片冲印

注册 登录  
 加关注