摘要: 一、服务器进程的启动和关闭: 下面是pg_ctl命令的使用方法和常用选项,需要指出的是,该命令是postgres命令的封装体,因此在使用上比直接使用postgres更加方便。 pg_ctl init[db] [-D DATADIR] [-s] [-o "OPTIONS"] pg_ctl start [-w] [-t SECS] [-D DATADIR] [-s] [-l FILENAME] [-o "OPTIONS"] pg_ctl stop [-W] [-t SECS] [-D DATADIR] [-s] [-m SHUTDOWN-MODE] pg_c 阅读全文
posted @ 2012-08-11 15:21 Merlin_Tang 阅读(1393) 评论(0) 推荐(0) 编辑
摘要: 一、使用EXPLAIN: PostgreSQL为每个查询都生成一个查询规划,因为选择正确的查询路径对性能的影响是极为关键的。PostgreSQL本身已经包含了一个规划器用于寻找最优规划,我们可以通过使用EXPLAIN命令来查看规划器为每个查询生成的查询规划。 PostgreSQL中生成的查询规划是由1到n个规划节点构成的规划树,其中最底层的节点为表扫描节点,用于从数据表中返回检索出的数据行。然而,不同的扫描节点类型代表着不同的表访问模式,如:顺序扫描、索引扫描,以及位图索引扫描等。如果查询仍然需要连接、聚集、排序,或者是对原始行的其它操作,那么就会在扫描节点"之上"有其它额 阅读全文
posted @ 2012-08-11 14:37 Merlin_Tang 阅读(3858) 评论(0) 推荐(0) 编辑
摘要: 在SQL的标准中事物隔离级别分为以下四种: 1. 读未提交(Read uncommitted) 2. 读已提交(Read committed) 3. 可重复读(Repeatable read) 4. 可串行化(Serializable) 然而PostgreSQL在9.1之前的版本中只是实现了其中两种,即读已提交和可串行化,如果在实际应用中选择了另外两种,那么PostgreSQL 将会自动向更严格的隔离级别调整。在PostgreSQL v9.1的版本中提供了三种实现方式,即在原有的基础上增加了可重复读。在这篇博客中我们将只是针对2)和4)进行说明和比较,因为在9.1中,3)和 4)的差别... 阅读全文
posted @ 2012-08-11 12:45 Merlin_Tang 阅读(1213) 评论(0) 推荐(0) 编辑
摘要: 一、索引的类型: PostgreSQL提供了多种索引类型:B-Tree、Hash、GiST和GIN,由于它们使用了不同的算法,因此每种索引类型都有其适合的查询类型,缺省时,CREATE INDEX命令将创建B-Tree索引。 1. B-Tree: CREATE TABLE test1 ( id integer, content varchar ); CREATE INDEX test1_id_index ON test1 (id); B-Tree索引主要用于等于和范围查询,特别是当索引列包含操作符" <、<=、=、>=和>"作为查询条件时,Postg 阅读全文
posted @ 2012-08-11 12:44 Merlin_Tang 阅读(2062) 评论(0) 推荐(0) 编辑
摘要: 一、逻辑操作符: 常用的逻辑操作符有:AND、OR和NOT。其语义与其它编程语言中的逻辑操作符完全相同。二、比较操作符: 下面是PostgreSQL中提供的比较操作符列表:操作符描述 <小于 >大于 <=小于或等于 >=大于或等于 =等于 !=不等于 比较操作符可以用于所有可以比较的数据类型。所有比较操作符都是双目操作符,且返回boolean类型。除了比较操作符以外,我们还可以使用BETWEEN语句,如: a BETWEEN x AND y 等效于 a >= x AND a <= y a NOT BETWEEN x AND y 等效于 a < x OR 阅读全文
posted @ 2012-08-11 12:41 Merlin_Tang 阅读(21798) 评论(0) 推荐(0) 编辑
摘要: 一、数值类型: 下面是PostgreSQL所支持的数值类型的列表和简单说明:名字存储空间描述范围 smallint2 字节小范围整数-32768 到 +32767 integer4 字节常用的整数-2147483648 到 +2147483647 bigint8 字节大范围的整数-9223372036854775808 到 9223372036854775807 decimal变长用户声明精度,精确无限制 numeric变长用户声明精度,精确无限制 real4 字节变精度,不精确6 位十进制数字精度... 阅读全文
posted @ 2012-08-11 12:40 Merlin_Tang 阅读(1895) 评论(0) 推荐(0) 编辑
摘要: 一、表的继承: 这个概念对于很多已经熟悉其他数据库编程的开发人员而言会多少有些陌生,然而它的实现方式和设计原理却是简单易懂,现在就让我们从一个简单的例子开始吧。 1. 第一个继承表: CREATE TABLE cities ( --父表 name text, population float, altitude int ); CREATE TABLE capitals ( --子表 state char(2) ) INHERITS (cities); capitals表继承自cities表的所有属性。在PostgreSQL里,一个表可以从零个或多个其它表中继承属性,而且一个查询既可以引... 阅读全文
posted @ 2012-08-11 12:39 Merlin_Tang 阅读(1619) 评论(0) 推荐(0) 编辑
摘要: 一个数据库包含一个或多个命名的模式,模式又包含表。模式还包含其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用而不会导致冲突; 比如,schema1和myschema都可以包含叫做mytable的表。和数据库不同,模式不是严格分离的:一个用户可以访问他所连接的数据库中的任意模式中的对象,只要他有权限。 我们需要模式有以下几个主要原因: 1). 允许多个用户使用一个数据库而不会干扰其它用户。 2). 把数据库对象组织成逻辑组,让它们更便于管理。 3). 第三方的应用可以放在不同的模式中,这样它们就不会和其它对象的名字冲突。 1. 创建模式: CREATE SC.. 阅读全文
posted @ 2012-08-11 12:37 Merlin_Tang 阅读(1751) 评论(0) 推荐(0) 编辑
摘要: 一、表的定义: 对于任何一种关系型数据库而言,表都是数据存储的最核心、最基础的对象单元。现在就让我们从这里起步吧。 1. 创建表: CREATE TABLE products ( product_no integer, name text, price numeric ); 2. 删除表: DROP TABLE products; 3. 创建带有缺省值的表: CREATE TABLE products ( product_no integer, name text, price numeric DEFAULT 9.99 --DEFAULT是关键字,其后的数值9.99是字段pri... 阅读全文
posted @ 2012-08-11 12:32 Merlin_Tang 阅读(3091) 评论(1) 推荐(0) 编辑