![](https://img-blog.csdnimg.cn/20201216132628933.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
PostgreSQL 13.0 Documentation
文章平均质量分 52
整个专栏根据官方文档,顺序进行。但不是对文档进行简单的英译汉,期间会包含更多的实操,以加深对于PostgreSQL的理解及提高实际运用水平。
希望跟大家能够一起慢慢的从入门开始,一点点读完这本 PostgreSQL 13.0 Documentation,通过系统、全面的学习,从而最终成为pg专家。
丹心明月
路上,期待不一样的精彩。
展开
-
0.开篇
大家好,我是李明,很高兴,从今天开始,跟大家一起进行PostgreSQL文档的学习。该课程基于的PostgreSQL版本为13.0,基于的文档为PostgreSQL 13.0 Documentation。课程根据文档的章节,分模块进行录制。PostgreSQL的官方网站为:https://www.postgresql.org/,可在此下载相应的官方文档。PostgreSQL的读音:https://www.postgresql.org/files/postgresql.mp3,课程中为Postg.原创 2020-12-06 21:42:21 · 128 阅读 · 0 评论 -
52.1 前后端协议概览
协议对于启动和正常的操作是分段进行的。在启动阶段,客户端打开到服务端的连接,并进行认证。如果一切顺利,那么服务端会发送状态信息给客户端,然后进入正常操作阶段。除了刚开始的连接请求,本部分的协议均由服务端驱动。在正常操作阶段,客户端发送查询及其他命令给服务端,服务端返回查询结果及其他响应。本部分的大部分由客户端请求驱动。会话的中断一般由客户端发起,也可由服务端强制中断。在正常操作中,SQL命令可使用两个子协议中的一个执行。在简单查询协议中,客户端发送文本查询字符串,然后由服务端解...翻译 2021-04-28 09:39:46 · 269 阅读 · 0 评论 -
50.4. The PostgreSQL Rule System
50.4 PostgreSQL的规则系统PostgreSQL提供规则系统以规范视图和模糊视图的更新。PostgreSQL规则系统原生由两种实现方式组成: 第一个使用行级处理,在执行器内部实现。无论何时访问行,均调用规则系统。该实现方式在1995年遗弃。 第二个实现方式叫做查询重写。重写系统是介于解析阶段和计划器/优化器之间的一个模块。该方式仍在支持中。 查询重写在第40章介绍了。其输入及输出均为查询树。...翻译 2021-04-26 14:15:00 · 219 阅读 · 0 评论 -
50.3. The Parser Stage
50.3解析阶段解析阶段包含两部分: 在gram.y和scan.l中定义的解析器使用unix工具bison和flex构建; 转换进程(transformationprocess)对解析器返回的数据结构进行更新和扩充; 50.3.1解析器解析器需要检查查询字符串(即客户端发送来的纯文本)的语法。如果语法正确,则会创建并返回解析树;否则报错。解析器和词法分析器使用unix工具bison和flex实现。词法分析器在文件scan.l中定义,用以识别限定符、SQL关键词等。...翻译 2021-04-26 14:05:32 · 150 阅读 · 0 评论 -
50.2. How Connections Are Established
50.2连接是如何建立的PostgreSQL使用简单的每个用户一个进程的客户端/服务器模式。此模式下,每个客户端进行连接到一个服务端进程。因为不能预先知道有多少客户端连接,故而使用了一个主进程,然后每次有连接请求,就由主进程分一个新的服务进程给客户端连接。该主进程名为postgres,并监听特定的额TCP/IP端口。每当检测到连接请求,postgres会分出一个新的服务进程。服务进程间使用semaphores和共享内存交互以确保在并发数据访问时的数据完整性。客户端进程可以是任意符合Postg..翻译 2021-04-26 13:34:13 · 206 阅读 · 0 评论 -
50.1. The Path of a Query
50.1查询执行路径为获得结果集,查询所需要的经过的解析阶段: 建立从应用程序到PostgreSQL服务的连接。应用程序发送查询到数据库服务,并等待数据库服务发回查询结果。 解析阶段(parsestage)检查应用程序发送的查询的语法并生成查询树(querytree); 重写系统(rewritesystem)使用解析阶段生成的查询树,然后检索是否有需要应用到查询树的规则(存储在系统视图中)。如果有,根据规则改写。 重写系统的一个应用是视图(view)。当查询视...翻译 2021-04-26 13:17:56 · 140 阅读 · 0 评论 -
ABORT
中断当前事务。语法:ABORT [ WORK | TRANSACTION ] [ AND [ NO ] CHAIN ]描述:回滚事务。参数:AND CHAIN 如果指定该参数,新的事务立马以与刚结束事务的相同描述启动(参见SET TRANSACTION)。注意:使用COMMIT成功终止事务。示例:终止所有变化:ABORT;兼容性:此命令为兼容历史。 ROLLBACK为标准SQL命令。参见:BEGIN,COMMIT,ROLLBACK...翻译 2021-04-21 09:15:44 · 515 阅读 · 0 评论 -
第四十一章 程序语言
PostgreSQL支持使用除SQL和C之外的语言编写用户自定义函数。其他语言一般称作程序语言(PLs)。对于以程序语言编写的函数,数据库服务器并未内置解析器。故需特殊的处理器进行处理。该处理器为编译为共享对象的C语言函数,并按需加载。当前,PostgreSQL支持4种程序语言:PL/pgSQL(第42章),PL/Tcl(第43章),PL/Perl(第44章)和PL/Python(第45章)。其他可用语言参见附录H。自定义新语言请参见第55章。41.1安装程序语言如果使用程序语言,需要将..翻译 2021-04-07 14:06:27 · 159 阅读 · 0 评论 -
40.3. Materialized Views
40.3物化视图物化视图与视图类似,也适用规则系统,不过物化视图保留结果集。CREATE MATERIALIZED VIEW mymatview AS SELECT * FROM mytab;与CREATE TABLE mymatview AS SELECT * FROM mytab;之间,最主要的区别是物化视图不可直接被更新,需要刷新物化视图数据:REFRESH MATERIALIZED VIEW mymatview;假设有表:CREATE TABLE invoi.翻译 2021-04-07 09:09:15 · 195 阅读 · 0 评论 -
40.1. The Query Tree
40.1查询树知道规则系统何时被调用及其输入输出对理解规则系统工作原理至关重要。规则系统位于解析器和计划器之间。它使用解析器的输出(查询树)和用户定义重写规则(也是一种带有额外信息的查询树)作为输入,输出0或多个查询树。何为查询树(querytree)呢?它是SQL语句的内部表示形式,其中构建它的单个部分是分开存储的。如果设置了debug_print_parse,debug_print_rewritten或debug_print_plan,则这些查询树可在数据库服务日志中看到。规...翻译 2021-04-06 14:53:42 · 535 阅读 · 0 评论 -
PostgreSQL中的事件触发器
作者:瀚高PG实验室(HighgoPGLab) 丹心明月注:本文章主要翻译自《PostgreSQL 13.0 Documentation》第三十九章PostgreSQL还提供了事件触发器实现第38章探讨的触发器机制。与普通的触发器不同,事件触发器针对整个数据库,且可捕获DDL事件。事件触发器可使用具有事件触发器支持的过程语言或C编写,但不可使用纯SQL编写。39.1事件触发器概览事件触发器在相关事件发生时触发。当前,支持的事件有ddl_command_start,ddl_...转载 2021-04-06 11:25:49 · 847 阅读 · 0 评论 -
PostgreSQL中的触发器
作者:瀚高PG实验室(HighgoPGLab) 丹心明月注:本文章主要翻译自《PostgreSQL 13.0 Documentation》第三十八章本章介绍编写函数触发器的相关信息。触发器函数可使用大部分可用的过程语言编写,包括PL/pgSQL(参见第42章),PL/Tcl(参见第43章),PL/Perl(参见第44章),和PL/Python(参见第45章)。阅读完本章后,可根据自己的喜好,到相应章节查看对应语言编写触发器的具体细节。也可以使用C语言编写触发器,不过使用过程语言更简...转载 2021-04-05 23:11:52 · 1165 阅读 · 1 评论 -
37.12. User-Defined Aggregates
37.12自定义聚合PostgreSQL中的聚合函数用以处理静态数据。为定义新的聚合函数,需要指定静态值的数据类型,初始值以及值转换函数。 CREATE AGGREGATE37.12.1移动聚合模式聚合函数可以选择性地支持移动聚合模式,这种模式可在很大程度上提高具有移动帧起点的窗口中执行的聚合函数的速度。37.12.2多态和可变参聚合聚合函数可使用多态状态转换函数或最终函数,以使相同函数可用于实现多个聚合函数。37.12.3排序集聚合PostgreSQL也支持排序集聚合,...翻译 2021-04-01 09:48:22 · 198 阅读 · 0 评论 -
37.10. C-Language Functions
37.10 C语言函数用户自定义函数可使用C语言(或与其兼容的语言,例如C++)编写。37.10.1动态加载使用CREATE FUNCTION命令创建的用户自定义C函数需要指定两个部分的信息:加载的对象文件名以及在对象文件中的函数的C名称。37.10.2 C语言函数中的基本类型在内部,PostgreSQL将基本类型看做“内存中的blob”。基本类型可使用以下三种内部格式的一种: 传递值,固定长度; 传递引用,固定长度; 传递引用,变长; C数据类..翻译 2021-03-31 14:18:01 · 363 阅读 · 0 评论 -
37.6-37.9
37.6函数重载只要参数不同,即可命名相同名称的函数。示例:CREATE FUNCTION test(int, real) RETURNS ...CREATE FUNCTION test(smallint, double precision) RETURNS ...37.7函数易变种类每个函数都有易变级别,可用值有VOLATILE,STABLE,IMMUTABLE。默认为VOLATILE。 VOLATILE:可做包含更改数据库在内的所有操作; STABLE:不可更改...翻译 2021-03-24 09:18:33 · 184 阅读 · 0 评论 -
37.5. Query Language (SQL) Functions
37.5查询语言(SQL)函数SQL函数执行一组SQL语句列表,并返回里列表中最后一个查询的结果。示例函数:CREATE FUNCTION clean_emp() RETURNS void AS 'DELETE FROM empWHERE salary < 0;' LANGUAGE SQL;SELECT clean_emp();clean_emp-----------(1 row)37.5.1 SQL函数的参数SQL函数的参数可以在函数体中使用名称或.翻译 2021-03-23 16:28:44 · 250 阅读 · 0 评论 -
第三十七章 扩展SQL
本章的接下来的小节,介绍如何通过添加以下内容扩展PostgreSQL的SQL查询语言: 函数 聚合 数据类型 操作符 索引的操作类型 相关对象的包 37.1扩展性如何工作PostgreSQL之所以可扩展,是因为其操作为系统表驱动的,而无需修改代码或加载第三方模块。37.2 PostgreSQL类型体系PostgreSQL的数据类型可分为基本类型、容器类型、域和伪类型。37.2.1基础类型就是那些在SQL语言以下(例如使用C)..翻译 2021-03-22 13:52:55 · 215 阅读 · 0 评论 -
CREATE DOMAIN
CREATE DOMAIN:定义新域。语法:CREATE DOMAIN name [ AS ] data_type[ COLLATE collation ][ DEFAULT expression ][ constraint [ ... ] ]where constraint is:[ CONSTRAINT constraint_name ]{ NOT NULL | NULL | CHECK (expression) }描述:CREATE DOMAIN创建一个新的域。域本质上是翻译 2021-03-19 14:50:36 · 1671 阅读 · 0 评论 -
36.62. views
当前数据库中定义的所有视图。翻译 2021-03-17 16:41:39 · 83 阅读 · 0 评论 -
36.61. view_table_usage
视图所使用的所有表。(不含系统表。)翻译 2021-03-17 16:40:06 · 112 阅读 · 0 评论 -
36.60. view_routine_usage
视图所用的所有函数和存储过程。翻译 2021-03-17 16:38:38 · 130 阅读 · 0 评论 -
36.59. view_column_usage
视图使用的所有列。翻译 2021-03-17 16:37:23 · 104 阅读 · 0 评论 -
36.58. user_mappings
当前数据库中的所有用户映射。翻译 2021-03-17 16:35:50 · 77 阅读 · 0 评论 -
36.57. user_mapping_options
当前数据库中用户映射的所有选项。翻译 2021-03-17 16:34:49 · 152 阅读 · 0 评论 -
36.56. user_defined_types
当前数据库中定义的所有复合类型。翻译 2021-03-17 16:33:21 · 96 阅读 · 1 评论 -
36.55. usage_privileges
多种对象的USAGE权限授予。翻译 2021-03-17 16:31:41 · 132 阅读 · 0 评论 -
36.54. udt_privileges
标识用户自定义类型的USAGE权限授予。翻译 2021-03-17 16:29:49 · 89 阅读 · 0 评论 -
36.53. triggers
当前数据库中所有触发器。翻译 2021-03-17 16:27:42 · 119 阅读 · 0 评论 -
36.52. triggered_update_columns
标识当前数据库中由触发器指定的列的列表(例如UPDATE OFcolumn1,column2..)。翻译 2021-03-17 16:26:18 · 97 阅读 · 0 评论 -
36.51. transforms
在当前数据库中定义的所有转换(transform)。翻译 2021-03-17 16:22:37 · 132 阅读 · 0 评论 -
36.50. tables
当前数据库中的所有表和视图。翻译 2021-03-17 16:19:53 · 125 阅读 · 0 评论 -
36.49. table_privileges
表或索引的所有授权。翻译 2021-03-17 16:18:33 · 226 阅读 · 0 评论 -
36.48. table_constraints
所有约束。翻译 2021-03-17 16:17:33 · 129 阅读 · 0 评论 -
36.47. sql_sizing
PostgreSQL中大小限制及最大值等信息。翻译 2021-03-17 16:16:24 · 99 阅读 · 0 评论 -
36.46. sql_parts
PostgreSQL支持的SQL标准部分。翻译 2021-03-17 16:14:50 · 115 阅读 · 0 评论 -
36.45. sql_implementation_info
包含有关SQL标准在实现上定义的各个方面的信息。翻译 2021-03-17 16:13:45 · 108 阅读 · 0 评论 -
36.44. sql_features
包含PostgreSQL中支持的SQL标准特性信息。翻译 2021-03-17 16:11:27 · 173 阅读 · 0 评论 -
36.43. sequences
当前数据库中定义的所有序列。翻译 2021-03-17 16:09:00 · 175 阅读 · 0 评论 -
36.42. schemata
当前数据库中所有的模式。翻译 2021-03-17 16:07:22 · 111 阅读 · 0 评论 -
36.41. routines
当前数据库中的所有函数和存储过程。翻译 2021-03-17 15:48:15 · 119 阅读 · 0 评论