云栖社区Java、Redis、MongoDB运营小编,有意合作请联系钉钉:15810436147
17.1. 使用Visual C++或Microsoft Windows SDK构建 17.1.1. 要求 17.1.2. 针对64位Windows的特殊考虑 17.1.3. 构建 17.1.4. 清理和安装 17.1.5. 运行回归测试 17.1.6. 构建文档 PostgreSQL可以使用来自微软的Visual C++编译器套件构建。
16.7. 平台相关的说明 16.7.1. AIX 16.7.2. Cygwin 16.7.3. HP-UX 16.7.4. MinGW/原生 Windows 16.7.5. Solaris 这一节提供了考虑 PostgreSQL 安装和设置的附加平台相关的话题。
16.6. 平台支持 如果代码包含规定要工作在一个平台(即一种 CPU 架构和操作系统的结合)上并且它最近已经被验证能在该平台上编译并通过其回归测试,PostgreSQL开发社区才会认为该平台是被支持的。
16.5. 安装后设置 16.5.1. 共享库 16.5.2. 环境变量 16.5.1. 共享库 在一些有共享库的系统里,你需要告诉你的系统如何找到新安装的共享库。那些并不是必须做这个工作的系统包括 FreeBSD、HP-UX、Linux、NetBSD、OpenBSD和Solaris。
16.3. 获取源码 PostgreSQL 10.1 源代码可以从我们的官方网站 https://www.postgresql.org/download/的下载区中获得。你将得到一个名为postgresql-10.1.tar.gz或postgresql-10.1.tar.bz2的文件。
16.2. 要求 一般说来,一个现代的与 Unix 兼容的平台应该就能运行PostgreSQL。 到发布为止已经明确测试过的平台的列表在 第 16.6 节中列出。在发布的doc子目录里面有许多平台相关的 FAQ文档,如果你碰到问题你可能会需要参考它们。
16.1. 简单版 ./configure make su make install adduser postgres mkdir /usr/local/pgsql/data chown postgres /usr/local/pgsql/data su - postgres /usr/loc.
部分 II. SQL 语言 这部份描述在PostgreSQL中SQL语言的使用。我们从描述SQL的一般语法开始,然后解释如何创建保存数据的结构、如何填充数据库以及如何查询它。中间的部分列出了在SQL命令中可用的数据类型和函数。
第 15 章 并行查询 目录 15.1. 并行查询如何工作 15.2. 何时会用到并行查询? 15.3. 并行计划 15.3.1. 并行扫描 15.3.2. 并行连接 15.3.3. 并行聚合 15.3.4. 并行计划小贴士 15.4. 并行安全性 15.4.1. 为函数和聚合加并行标签 PostgreSQL能设计出利用多 CPU 让查询更快的查询计划。
15.4. 并行安全性 15.4.1. 为函数和聚合加并行标签 规划器把查询中涉及的操作分类成并行安全、并行受限 或者并行不安全。并行安全的操作不会与并行查询的使用产生冲突。 并行受限的操作不能在并行工作者中执行,但是能够在并行查询的领导者中执行。
15.3. 并行计划 15.3.1. 并行扫描 15.3.2. 并行连接 15.3.3. 并行聚合 15.3.4. 并行计划小贴士 因为每个工作者只执行完成计划的并行部分,所以不可能简单地产生一个普通查询计划并使用多个工作者运行它。
15.2. 何时会用到并行查询? 有几种设置会导致查询规划器在任何情况下都不生成并行查询计划。为了让并行查询计划能够被生成,必须配置好下列设置。 max_parallel_workers_per_gather必须被设置为大于零的值。
15.1. 并行查询如何工作 当优化器判断对于某一个特定的查询,并行查询是最快的执行策略时,优化器将创建一个查询计划。该计划包括一个Gather或Gather Merge节点。下面是一个简单的例子: EXPLAIN SELECT * FROM pgbench_accounts WHERE fi.
第 14 章 性能提示 目录 14.1. 使用EXPLAIN 14.1.1. EXPLAIN基础 14.1.2. EXPLAIN ANALYZE 14.1.3. 警告 14.2. 规划器使用的统计信息 14.
14.5. 非持久设置 持久性是数据库的一个保证已提交事务的记录的特性(即使是发生服务器崩溃或断电)。 然而,持久性会明显增加数据库的负荷,因此如果你的站点不需要这个保证,PostgreSQL可以被配置成运行更快。
14.4. 填充一个数据库 14.4.1. 禁用自动提交 14.4.2. 使用COPY 14.4.3. 移除索引 14.4.4. 移除外键约束 14.4.5. 增加maintenance_work_mem 14.4.6. 增加max_wal_size 14.4.7. 禁用 WAL 归档和流复制 14.4.8. 事后运行ANALYZE 14.4.9. 关于pg_dump的一些注记 第一次填充数据库时可能需要插入大量的数据。
14.3. 用显式JOIN子句控制规划器 我们可以在一定程度上用显式JOIN语法控制查询规划器。要明白为什么需要它,我们首先需要一些背景知识。 在一个简单的连接查询中,例如: SELECT * FROM a, b, c WHERE a.id = b.id AND b.ref = c.id; 规划器可以自由地按照任何顺序连接给定的表。
14.2. 规划器使用的统计信息 14.2.1. 单列统计 14.2.2. 扩展统计 14.2.1. 单列统计 如我们在上一节所见,查询规划器需要估计一个查询要检索的行数,这样才能对查询计划做出好的选择。
14.1. 使用EXPLAIN 14.1.1. EXPLAIN基础 14.1.2. EXPLAIN ANALYZE 14.1.3. 警告 PostgreSQL为每个收到查询产生一个查询计划。
第 13 章 并发控制 目录 13.1. 介绍 13.2. 事务隔离 13.2.1. 读已提交隔离级别 13.2.2. 可重复读隔离级别 13.2.3. 可序列化隔离级别 13.
13.6. 锁定和索引 尽管PostgreSQL提供对表数据访问的非阻塞读/写, 但并非PostgreSQL中实现的每一个索引访问方法当前都能够提供非阻塞读/写访问。 不同的索引类型按照下面方法操作: B-tree、GiST和SP-GiST索引 短期的页面级共享/排他锁被用于读/写访问。
13.5. 提醒 一些 DDL 命令(当前只有TRUNCATE和表重写形式的ALTER TABLE)对于 MVCC 不是安全的。这意味着在截断或者重写提交之后,该表将对并发事务(如果它们使用的快照是在 DDL 命令提交前取得的)呈现出空表的形态。
13.4. 应用级别的数据完整性检查 13.4.1. 用可序列化事务来强制一致性 13.4.2. 使用显式锁定强制一致性 对于使用读已提交事务的数据完整性强制业务规则非常困难,因为对每一个语句数据视图都在变化,并且如果一个写冲突发生即使一个单一语句也不能把它自己限制到该语句的快照。
13.3. 显式锁定 13.3.1. 表级锁 13.3.2. 行级锁 13.3.3. 页级锁 13.3.4. 死锁 13.3.5. 咨询锁 PostgreSQL提供了多种锁模式用于控制对表中数据的并发访问。
13.2. 事务隔离 13.2.1. 读已提交隔离级别 13.2.2. 可重复读隔离级别 13.2.3. 可序列化隔离级别 SQL标准定义了四种隔离级别。最严格的是可序列化,在标准中用了一整段来定义它,其中说到一组可序列化事务的任意并发执行被保证效果和以某种顺序一个一个执行这些事务一样。
13.1. 介绍 PostgreSQL为开发者提供了一组丰富的工具来管理对数据的并发访问。在内部,数据一致性通过使用一种多版本模型(多版本并发控制,MVCC)来维护。这就意味着每个 SQL 语句看到的都只是一小段时间之前的数据快照(一个数据库版本),而不管底层数据的当前状态。
第 12 章 全文搜索 目录 12.1. 介绍 12.1.1. 什么是一个文档? 12.1.2. 基本文本匹配 12.1.3. 配置 12.2. 表和索引 12.2.1. 搜索一个表 12.2.
12.11. 限制 PostgreSQL的文本搜索特性的当前限制是: 每一个词位的长度必须小于 2K 字节 一个tsvector(词位 + 位置)的长度必须小于 1 兆字节 词位的数量必须小于 264 tsvector中的位置值必须大于 0 并且小于 16,383 <N>(.
12.10. psql支持 关于文本搜索配置对象的信息可以在psql中使用一组命令获得: \dF{d,p,t}[+] [PATTERN] 可选的+能产生更多细节。 可选参数PATTERN可以是一个文本搜索对象的名称,可以是模式限定的。
12.9. GIN 和 GiST 索引类型 有两种索引可以被用来加速全文搜索。注意全文搜索并非一定需要索引,但是在一个定期会被搜索的列上,通常需要有一个索引。 CREATE INDEX name ON table USING GIN(column); 创建一个基于 GIN(通用倒排索引)的索引。
12.8. 测试和调试文本搜索 12.8.1. 配置测试 12.8.2. 解析器测试 12.8.3. 词典测试 一个自定义文本搜索配置的行为很容易变得混乱。本节中描述的函数对于测试文本搜索对象有用。
12.7. 配置例子 一个文本搜索配置指定了将一个文档转换成一个tsvector所需的所有选项:用于把文本分解成记号的解析器,以及用于将每一个记号转换成词位的词典。每一次to_tsvector或to_tsquery的调用都需要一个文本搜索配置来执行其处理。
12.6. 词典 12.6.1. 停用词 12.6.2. 简单词典 12.6.3. 同义词词典 12.6.4. 分类词典 12.6.5. Ispell 词典 12.6.6. Snowball 词典 词典被用来消除不被搜索考虑的词(stop words)、并被用来正规化词这样同一个词的不同派生形式将会匹配。
12.5. 解析器 文本搜索解析器负责把未处理的文档文本划分成记号并且标识每一个记号的类型,而可能的类型集合由解析器本身定义。注意一个解析器完全不会修改文本 — 它简单地标识看似有理的词边界。因为这种有限的视野,对于应用相关的自定义解析器的需求就没有自定义字典那么强烈。
12.4. 额外特性 12.4.1. 操纵文档 12.4.2. 操纵查询 12.4.3. 用于自动更新的触发器 12.4.4. 收集文档统计数据 这一节描述在文本搜索中有用的一些额外的函数和操作符。
12.3. 空值文本搜索 12.3.1. 解析文档 12.3.2. 解析查询 12.3.3. 排名搜索结果 12.3.4. 加亮结果 要实现全文搜索必须要有一个从文档创建tsvector以及从用户查询创建tsquery的函数。
12.2. 表和索引 12.2.1. 搜索一个表 12.2.2. 创建索引 在前一节中的例子演示了使用简单常数字符串进行全文匹配。本节展示如何搜索表数据,以及可选择地使用索引。 12.2.1. 搜索一个表 可以在没有一个索引的情况下做一次全文搜索。
12.1. 介绍 12.1.1. 什么是一个文档? 12.1.2. 基本文本匹配 12.1.3. 配置 全文搜索(或者文本搜索)提供了确定满足一个查询的自然语言文档的能力,并可以选择将它们按照与查询的相关度排序。
第 11 章 索引 目录 11.1. 简介 11.2. 索引类型 11.3. 多列索引 11.4. 索引和ORDER BY 11.5. 组合多个索引 11.6. 唯一索引 11.7. 表达式索引 11.8. 部分索引 11.9. 操作符类和操作符族 11.10. 索引和排序规则 11.11. 只用索引的扫描 11.12. 检查索引使用 索引是提高数据库性能的常用途径。
11.12. 检查索引使用 尽管PostgreSQL中的索引并不需要维护或调优,但是检查真实的查询负载实际使用了哪些索引仍然非常重要。检查一个独立查询的索引使用情况可以使用EXPLAIN命令,它应用于这种目的的内容在第 14.1 节中有介绍。
11.11. 只用索引的扫描 PostgreSQL中的所有索引都是二级索引,表示每一个索引都被存储在表的主数据区域(在PostgreSQL术语中被称为该表的堆)之外。这意味着在一次普通索引扫描中,每次取一行需要从索引和堆中取得数据。
11.10. 索引和排序规则 一个索引在每一个索引列上只能支持一种排序规则。如果需要多种排序规则,你可能需要多个索引。 考虑这些语句: CREATE TABLE test1c ( id integer, content varchar COLLATE "x" ); CREATE INDEX test1c_content_index ON test1c (content); 该索引自动使用下层列的排序规则。
11.9. 操作符类和操作符族 一个索引定义可以为索引中的每一列都指定一个操作符类。 CREATE INDEX name ON table (column opclass [sort options] [, ...]); 操作符类标识该列上索引要使用的操作符。
11.8. 部分索引 一个部分索引是建立在表的一个子集上,而该子集则由一个条件表达式(被称为部分索引的谓词)定义。而索引中只包含那些符合该谓词的表行的项。部分索引是一种专门的特性,但在很多种情况下它们也很有用。
11.7. 表达式索引 一个索引列并不一定是底层表的一个列,也可以是从表的一列或多列计算而来的一个函数或者标量表达式。这种特性对于根据计算结果快速获取表中内容是有用的。 例如,一种进行大小写不敏感比较的常用方法是使用lower函数: SELECT * FROM test1 WHERE low.
11.6. 唯一索引 索引也可以被用来强制列值的唯一性,或者是多个列组合值的唯一性。 CREATE UNIQUE INDEX name ON table (column [, ...]); 当前,只有B-tree能够被声明为唯一。
11.5. 组合多个索引 只有查询子句中在索引列上使用了索引操作符类中的操作符并且通过AND连接时才能使用单一索引。例如,给定一个(a, b) 上的索引,查询条件WHERE a = 5 AND b = 6可以使用该索引,而查询WHERE a = 5 OR b = 6不能直接使用该索引。
11.4. 索引和ORDER BY 除了简单地查找查询要返回的行外,一个索引可能还需要将它们以指定的顺序传递。这使得查询中的ORDER BY不需要独立的排序步骤。在PostgreSQL当前支持的索引类型中,只有B-tree可以产生排序后的输出,其他索引类型会把行以一种没有指定的且与实现相关的顺序返回。
11.3. 多列索引 一个索引可以定义在表的多个列上。例如,我们有这样一个表: CREATE TABLE test2 ( major int, minor int, name varchar ); (即将我们的/dev目录保存在数据库中)而且我们经常会做如下形式的查询: SELE.
11.2. 索引类型 PostgreSQL提供了多种索引类型: B-tree、Hash、GiST、SP-GiST 、GIN 和 BRIN。每一种索引类型使用了 一种不同的算法来适应不同类型的查询。