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

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 | 阅读(13410) |评论(62) | 阅读全文>>

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

2011-8-21 8:32:39 阅读56549 评论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 | 阅读(56549) |评论(32) | 阅读全文>>

PostgreSQL ECPG 开发 DEMO

2016-5-29 14:12:04 阅读25 评论0 292016/05 May29

ECPG 是在C中嵌套SQL的一种用法。

写好pgc文件后,需要使用ecpg程序将pgc编程成C文件来使用。

详细的用法请参考

https://www.postgresql.org/docs/9.5/static/ecpg.html

ecpg的用法, 以EXEC SQL开头表示后面是SQL写法

一些简单的用法

大小写敏感.

.1. 连接数据库

EXEC SQL CONNECT TO target [AS connection-name] [USER user-name]; target : dbname[@hostname][:port] tcp:postgresql://hostname[:port][/dbname][?options] unix:postgresql://hostname[:port][/dbname][?options] 例子 EXEC SQL CONNECT TO mydb@sql.mydomain.com; EXEC SQL CONNECT TO unix:postgresql://sql.mydomain.com/mydb AS myconnection USER john; EXEC SQL BEGIN DECLARE SECTION; const char *target

作者  | 2016-5-29 14:12:04 | 阅读(25) |评论(0) | 阅读全文>>

深入浅出PostgreSQL B-Tree索引结构

2016-5-29 14:11:34 阅读29 评论0 292016/05 May29

PostgreSQL 的B-Tree索引页分为几种类别

meta page root page # btpo_flags=2 branch page # btpo_flags=0 leaf page # btpo_flags=1 如果即是leaf又是root则 btpo_flags=3。

其中meta page和root page是必须有的,meta page需要一个页来存储,表示指向root page的page id。

随着记录数的增加,一个root page可能存不下所有的heap item,就会有leaf page,甚至branch page,甚至多层的branch page。

一共有几层branch 和 leaf,就用btree page元数据的 level 来表示。

我们可以使用pageinspect插件,内窥B-Tree的结构。

层次可以从bt_page_stats的btpo得到,代表当前index page所处的层级。

注意层级并不是唯一的,例如btpo=3的层级,可能有分几个档。

打个比喻,腾讯的技术岗位级别T3,对应T3这个级别又有几个小的档位。和这里的含义差不多,只是没有区分小档位的值,但是后面我们能看到它的存在。

btpo=0级表示最底层,处于这个层级的index pages存储的items(ctid)是指向heap page的。

类别和层级不挂钩,类别里面又可以有多个层级,但是只有层级=0的index

作者  | 2016-5-29 14:11:34 | 阅读(29) |评论(0) | 阅读全文>>

Oracle有个功能,可以将用户插入的NULL值替换成指定的值。

这个功能和default值的用意并不一样,default是指用户没有指定值时,使用default值代替。

例如

postgres=# alter table test alter column id set default 1; ALTER TABLE postgres=# create table t(id int, info text default 'abc'); CREATE TABLE postgres=# insert into t values (1); INSERT 0 1 postgres=# select * from t; id | info ----+------ 1 | abc (1 row)

当用户指定了NULL时,进去的就是NULL。

postgres=# insert into t values (1,NULL); INSERT 0 1 postgres=# select * from t; id | info ----+------ 1 | abc 1 | (2 rows)

而NULL值的替换则是用户在给定了NULL值时可以替换为其他值。

PostgreSQL如何实现呢?

用触发器就可以实现了

postgres=# create or replace function tgf1() returns trigger as $$ declare begin

作者  | 2016-5-29 14:10:49 | 阅读(24) |评论(0) | 阅读全文>>

ssh Forward X11 实现远程主机GUI在本地展示 (C/S X)

2016-5-29 14:10:18 阅读15 评论0 292016/05 May29

有些时候,有些程序可能需要依赖图形界面才能启动,例如安装Oracle时(其实oracle支持命令行安装),例如需要启动一个图形界面的浏览器如firefox。

作为服务端的系统,通常不会安装臃肿的图形界面。

那么如何在不安装图形界面的的情况下启动图形界面的?听起来很矛盾,但是实际上是可行的。

X Window System(常被简称为X11或X),是一套基于X display protocol的windowing system,X GUI环境的功能包括窗口的绘制、移动,以及与鼠标、键盘等输入设备的交互。

X采用C/S模型(这是关键):一个X server 和多个应用程序(client)通信。server接收client的请求绘制窗口,并将来自鼠标、键盘等设备的输入传递给client。

因此 X server和client可以位于同一计算机上,例如在Linux主机上使用KDE等桌面环境就是这种模式。X server也可以通过同构网络、异构网络或Internet与client通信。

X server与client之间的通信是不加密的,这个问题可以通过SSH解决。SSH是Secure Shell的简称,SSH可以看作是通信被加密压缩版的telnet。

需要用到SSH的forwarding功能,当X server与client所在计算机都支持SSH协议时,X server与client之间不安全的TCP/IP连接可以转送到(forwarding)二者之间建立的SSH连接上。

作者  | 2016-5-29 14:10:18 | 阅读(15) |评论(0) | 阅读全文>>

防止短连接耗尽你的动态TCP端口

2016-5-29 14:09:42 阅读18 评论0 292016/05 May29

用pgbench使用短连接压测一个PostgreSQL数据库(select 1),其他数据库亦如此。

$ vi test.sql select 1; $ export PGPASSWORD=digoal $ pgbench -M simple -C -n -r -P 1 -c 800 -j 80 -T 1000 -h xxx.xxx.xxx.xxx -p xxxx -U xxx dbname

压测一段时间之后,可能会因为本地(客户端)的端口耗尽,客户端会报错如下

connection to database "postgres" failed: could not connect to server: Cannot assign requested address Is the server running on host "xxx.xxx.xxx.xxx" and accepting TCP/IP connections on port 1925? connection to database "postgres" failed: could not connect to server: Cannot assign requested address Is the server running on host "xxx.xxx.xxx.xxx" and accepting TCP/IP connections on port 1925?

原因是客户端需要为每一个连接动态创建TCP端口,所以每个连接会消耗一个端口。

作者  | 2016-5-29 14:09:42 | 阅读(18) |评论(0) | 阅读全文>>

注意PostgreSQL的关键字(保留字)和identified的用法和位置

2016-5-29 14:09:10 阅读15 评论0 292016/05 May29

关键字即词法解析时用到的一些固定的单词,identifier则是用户定义的一些名词(如表名,索引名,字段名,函数名等等)

PostgreSQL 有一张关键字列表

https://www.postgresql.org/docs/9.5/static/sql-keywords-appendix.html

在这个列表中的关键字,如果出现的位置可以是identified,则会报错。

https://www.postgresql.org/docs/9.5/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

例子:

postgres=# select 1 and; ERROR: syntax error at or near ";" LINE 1: select 1 and; ^

and就是一个关键字,并且他出现在了可以是identifer的位置,所以要解决这个问题就是加双引号,或者排除歧义。

作者  | 2016-5-29 14:09:10 | 阅读(15) |评论(0) | 阅读全文>>

在Oracle中,因为不能设置字段的default sequence.nextval,所以如果要设置自增字段,需要使用触发器。

例如:

create sequence seq; create table test(id int, info text); CREATE OR REPLACE TRIGGER tg1 BEFORE INSERT ON test FOR EACH ROW BEGIN SELECT seq.nextval INTO :new.ID FROM dual; end;

这种方式能在INSERT前,把id的值改成seq.nextval。

从而达到自增主键的目的。

但是它的开销太大,而且非常不友好。

PostgreSQL中,建议这样使用

test=# create table test(id serial, info text); CREATE TABLE test=# insert into test (info) values (1); test=# insert into test (info) values ('test'); test=# select * from test; id | info ----+------ 1 | 1 2 | test (2 rows)

或者这样

test=# create sequence seq; CREATE SEQUENCE test=# create table

作者  | 2016-5-29 14:08:12 | 阅读(17) |评论(0) | 阅读全文>>

使用alidecode将RDS PG同步到线下, 或者将MySQL同步到PG

2016-5-29 14:07:50 阅读21 评论0 292016/05 May29

alidecode是RDS PG提供的一个逻辑复制插件,使用它,可以将RDS PG通过逻辑复制的方式,把数据同步到线下的PostgreSQL。

同时还支持将MySQL的数据同步到PostgreSQL。

目前alidecode还没有对外开放下载,敬请期待。

下面是使用方法。

准备工作,

提交工单,开放用户的replication角色。

postgres=# alter role digoal replication; ALTER ROLE

阿里云的RDS PG需要将主备的pg_hba.conf进行修正,增加replication的条目。

例子

$ vi $PGDATA/pg_hba.conf host replication digoal 0.0.0.0/0 md5

阿里云的RDS PG需要调整主备的postgresql.conf,将wal_level改成logical。

并重启主备数据库,所以用户要开通此功能,需要重启实例哦

wal_level = logical

用户需要在RDS管控平台,配置白名单,允许alidecode客户端所在的主机连接RDS数据库。

下载alidecode客户端。

安装postgresql, mysql。(需要用到头文件)

如果你不需要将mysql的数据同步到PG,则不需要编译mysql的部分。

在Makefile和dbsync.h中注释掉mysql的部分即可。

作者  | 2016-5-29 14:07:50 | 阅读(21) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 
 
 

浙江省 杭州市 狮子座

 发消息  写留言

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

日志分类

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

FlagCounter

 
 
模块内容加载中...
 
 
 
 
 

新浪微博

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

页脚

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

GACHA-脖子以下全是腿的妹子

二次元同好交流新大陆

扫码下载App

LOFTER-苍井空公开择婿标准

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

注册 登录  
 加关注