↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

PostgreSQL 文档检索

PG 18 · 按类别浏览,或输入名称与关键词

常用条目12360
主键章节正文PG185.5.4. 主键一个主键约束表示可以用作表中行的唯一标识符的一个列或者一组列。这要求那些值都是唯一的并且非空。因此,下面的两个表定义接受相同的数据:CREATE TABLE products ( product_no integer UNIQUE NOT NULL, name text, price numeric ); CREATE TABLE products ( pro…主键 事件回调过程章节正文PG1832.14.2. 事件回调过程 PGEventProc # PGEventProc 是通过 typedef 定义的事件过程指针类型,也就是接收 libpq 事件的用户回调函数的指针类型。事件过程的签名必须为: int eventproc(PGEventId evtId, void *evtInfo, void *passThrough) evtId 参数指示发生了哪一种 PGE…事件回调过程 事件支持函数章节正文PG1832.14.3. 事件支持函数 PQregisterEventProc # 为 libpq 注册一个事件回调过程。 int PQregisterEventProc(PGconn *conn, PGEventProc proc, const char *name, void *passThrough); 对于希望接收其事件的每个 PGconn,都必须注册一次事件过程。一个连接可注…事件支持函数 事件示例章节正文PG1832.14.4. 事件示例下面给出一个示例框架,用于管理与 libpq 连接和结果关联的私有数据。/* libpq 事件所需的头文件(注意:其中包含 libpq-fe.h) */ #include <libpq-events.h> /* instanceData 数据 */ typedef struct { int n; char *str; } mydata; /* PGEv…事件示例 事件类型章节正文PG1832.14.1. 事件类型枚举 PGEventId 命名了事件系统处理的事件类型。它的所有值的名称都以 PGEVT 开始。对于每一种事件类型,都有一个相应的事件信息结构体用来承载传递给事件处理器的参数。事件类型是:PGEVT_REGISTER # 注册事件发生在调用 PQregisterEventProc 时。这是初始化任何事件过程可能需要的 instanceData 的理想时…事件类型 事件系统章节正文PG1832.14. 事件系统 libpq 的事件系统被设计为向已注册的事件处理器通知其感兴趣的 libpq 事件,例如 PGconn 以及 PGresult 对象的创建和销毁。一个主要用途是允许应用将自己的数据与一个 PGconn 或者 PGresult 关联在一起,并且确保那些数据在适当的时候被释放。每个注册的事件处理程序都与两项数据相关联,libpq 仅将其视为不透明的 void…事件系统 事件触发器章节正文PG1841.10.2. 事件触发器 PL/pgSQL 可以被用来定义事件触发器。PostgreSQL 要求一个可以作为事件触发器调用的函数必须被声明为没有参数并且返回类型为 event_trigger。当一个 PL/pgSQL 函数作为事件触发器被调用时,会在顶层块中自动创建一些特殊变量。它们是:TG_EVENT text # 触发器被触发时对应的事件。 TG_TAG text # …事件触发器 事件触发器函数章节正文PG189.30. 事件触发器函数 PostgreSQL 提供了这些辅助函数来从事件触发器检索信息。更多有关事件触发器的信息请见第 38 章。事件触发器函数 事件触发器行为概述章节正文PG1838.1. 事件触发器行为概述只要与事件触发器关联的事件在其定义所在数据库中发生,事件触发器就会被触发。目前支持的事件有 login、ddl_command_start、ddl_command_end、table_rewrite 和 sql_drop。未来版本可能会增加对更多事件的支持。事件触发器行为概述 事务章节正文PG183.4. 事务事务是所有数据库系统中的一个基本概念。事务的要点在于,它把多个步骤打包成一个单一的、要么全部成功要么全部失败的操作。步骤之间的中间状态对其他并发事务不可见;如果发生某种故障使事务无法完成,那么其中任何一步都不会对数据库产生影响。例如,考虑一个银行数据库,其中保存着各个客户账户的余额,以及各营业网点的总存款余额。假设我们要记录一笔从 Alice 的账户向 Bob 的…事务 事务 ID 和快照信息函数章节正文PG189.27.8. 事务 ID 和快照信息函数表 9.84 中展示的函数以一种可导出的形式提供了服务器事务信息。这些函数的主要用途是判断在两个快照之间哪些事务被提交。表 9.84. 事务 ID 和快照信息函数 函数 描述 age ( xid ) → integer 返回给定事务 ID 与当前事务计数器之间的事务数。 mxid_age ( xid ) → integer 返回给定多事…事务 ID 和快照信息函数 事务与标识符章节正文PG1867.1. 事务与标识符事务可以使用 BEGIN 或 START TRANSACTION 显式创建,并使用 COMMIT 或 ROLLBACK 结束。显式事务之外的 SQL 语句会自动使用单语句事务。每个事务都由唯一的 VirtualTransactionId 标识(也称为 virtualXID 或 vxid),它由后端的进程号(即 procNumber)和每个后端本地按顺序分…事务与标识符 事务与锁章节正文PG1867.2. 事务与锁当前正在执行的事务 ID 显示在 pg_locks 的 virtualxid 和 transactionid 列中。只读事务会有 virtualxid,但 transactionid 为 NULL;读写事务则会设置这两列。某些锁类型等待 virtualxid,而另一些锁类型等待 transactionid。行级读锁和写锁直接记录在被锁定的行中,可使用 pgr…事务与锁 事务开始回调章节正文PG1847.6.4.3. 事务开始回调只要某个已提交事务的开始被解码,就会调用必需的 begin_cb 回调。已中止的事务及其内容永远不会被解码。typedef void (*LogicalDecodeBeginCB) (struct LogicalDecodingContext *ctx, ReorderBufferTXN *txn); txn 参数包含该事务的元信息,例如它提交时…事务开始回调 事务管理章节正文PG1845.4. 事务管理不能通过 SPI_execute 这类 SPI 函数运行 COMMIT、ROLLBACK 之类的事务控制命令。不过,也有单独的接口函数允许通过 SPI 进行事务控制。如果不考虑调用上下文,那么在任意用户定义的、可从 SQL 调用的函数中开始和结束事务,通常既不安全也不合理。例如,如果某个函数处在某条 SQL 命令的复杂 SQL 表达式中间,那么在该函数内部设…事务管理 事务管理章节正文PG1841.8. 事务管理在由 CALL 命令调用的过程中,以及在匿名代码块(DO 命令)中,可以使用 COMMIT 和 ROLLBACK 结束事务。事务通过这些命令结束后,会自动开始一个新事务,因此不存在单独的 START TRANSACTION 命令(注意 BEGIN 和 END 在 PL/pgSQL 中含义不同)。这里是一个简单的示例:CREATE PROCEDURE tran…事务管理 事务管理章节正文PG1844.8. 事务管理如果过程是从顶层调用的,或者匿名代码块(DO 命令)是从顶层调用的,就可以控制事务。要提交当前事务,调用 plpy.commit()。要回滚当前事务,调用 plpy.rollback()。(注意,不能通过 plpy.execute 或类似函数来执行 SQL 命令 COMMIT 或 ROLLBACK,必须使用这些函数。)事务结束后,会自动启动一个新事务,因此不…事务管理 事务管理章节正文PG1842.10. 事务管理在从顶层调用的过程,或者从顶层调用的匿名代码块(DO 命令)中,可以控制事务。要提交当前事务,可调用 commit 命令。要回滚当前事务,可调用 rollback 命令。(注意,不能通过 spi_exec 或类似命令执行 SQL 命令 COMMIT 或 ROLLBACK;必须使用前述 Tcl 的 commit 或 rollback 命令来完成。)一个事务结…事务管理 事务管理章节正文PG18F.38.4. 事务管理在引用某个外部服务器上任意远程表的查询期间,如果当前本地事务尚未在该远程服务器上打开对应的事务,postgres_fdw 就会在该远程服务器上打开一个事务。本地事务提交或中止时,远程事务也会提交或中止。保存点也会通过创建对应的远程保存点进行类似管理。当本地事务的隔离级别为 SERIALIZABLE 时,远程事务使用 SERIALIZABLE;否则使用 R…事务管理 事务管理选项章节正文PG18F.38.1.6. 事务管理选项如“事务管理”一节所述,在 postgres_fdw 中,事务是通过创建对应的远程事务来管理的,子事务则通过创建对应的远程子事务来管理。当本地事务涉及多个远程事务时,默认情况下,postgres_fdw 会在本地事务提交或中止时串行提交或中止这些远程事务。当本地子事务涉及多个远程子事务时,默认情况下,postgres_fdw 也会在本地子事务提交…事务管理选项 事务结束回调章节正文PG1847.6.4.4. 事务结束回调只要事务提交被解码,就会调用必需的 commit_cb 回调。如果有被修改的行,那么在此之前,所有已修改行的 change_cb 回调都已经被调用过。typedef void (*LogicalDecodeCommitCB) (struct LogicalDecodingContext *ctx, ReorderBufferTXN *txn, X…事务结束回调 事务隔离章节正文PG1813.2. 事务隔离 SQL 标准定义了四个事务隔离级别。最严格的是可串行化,标准将它定义为:一组可串行化事务的任意并发执行,都保证与按照某种顺序一次只运行一个事务的效果相同。其他三个级别则按现象定义,这些现象源自并发事务之间的相互作用,而在各自级别上这些现象不得发生。标准指出,由于可串行化的定义,这些现象在该级别下都不可能出现。(这并不奇怪,如果事务的效果必须与一次只运行一个…事务隔离 事务预备回调章节正文PG1847.6.4.11. 事务预备回调只要一个用于两阶段提交的事务被解码到预备点,就会调用必需的 prepare_cb 回调。如果存在任何被修改的行,那么在此之前,所有这些行的 change_cb 回调都已经被调用过。gid 字段是 txn 参数的一部分,可以在这个回调中使用。typedef void (*LogicalDecodePrepareCB) (struct Logica…事务预备回调 事后运行 ANALYZE章节正文PG1814.4.8. 事后运行 ANALYZE 每当显著改变了表中数据的分布,都强烈建议运行 ANALYZE。这也包括向表中批量装载大量数据。运行 ANALYZE(或 VACUUM ANALYZE)可以确保规划器掌握该表的最新统计信息。如果没有统计信息,或者统计信息已经过时,规划器在生成查询计划时就可能做出糟糕决定,从而导致相关表性能不佳。注意,如果启用了自动清理守护进程,它可能会自…事后运行 ANALYZE 二级文件系统的使用章节正文PG1818.2.1. 二级文件系统的使用很多安装会把数据库集簇建在机器“根”卷以外的文件系统(卷)上。如果这样做,不建议把二级卷的最顶层目录(挂载点)直接用作数据目录。最佳实践是在挂载点目录下创建一个由 PostgreSQL 用户拥有的目录,再在其下创建数据目录。这样可以避免权限问题,尤其是在执行 pg_upgrade 之类的操作时;同时也能确保二级卷脱机时以干净的方式失败。二级文件系统的使用 二进制串函数和操作符章节正文PG189.5. 二进制串函数和操作符本节描述用于检查和操作二进制字符串(即 bytea 类型的值)的函数和操作符。其中许多函数在用途和语法上都与上一节中描述的文本字符串函数等效。SQL 定义了一些使用关键字而不是逗号来分隔参数的字符串函数。详情请见表 9.11。PostgreSQL 也提供了这些函数使用常规函数调用语法的版本(参阅表 9.12)。表 9.11. SQL 二进制串函数和…二进制串函数和操作符 二进制数据类型章节正文PG188.4. 二进制数据类型 bytea 数据类型允许存储二进制串,参见表 8.6。表 8.6. 二进制数据类型 名字 存储尺寸 描述 bytea 1 或 4 字节外加真正的二进制串 变长二进制串二进制串是八位组(或字节)的序列。二进制串与字符串有两点区别。首先,二进制串明确允许存储值为零的字节以及其他“不可打印”的字节(通常指十进制范围 32 到 126 之外的字节)。而字符串不…二进制数据类型 二进制格式章节正文PG18二进制格式 binary 格式选项会使所有数据以二进制格式而不是文本格式存储或读取。它比文本和 CSV 格式稍快一些,但二进制格式文件在不同的机器架构和 PostgreSQL 版本之间的可移植性较差。此外,二进制格式与数据类型高度相关。例如,不能从 smallint 列输出二进制数据再读入到 integer 列中,尽管这种做法在文本格式下是可行的。binary 文件格式由文件头…二进制格式 交错处理结果与发送查询章节正文PG1832.5.1.4. 交错处理结果与发送查询为避免大型管道发生死锁,客户端应围绕非阻塞事件循环组织,使用 select、poll、WaitForMultipleObjectEx 等操作系统机制。客户端应用程序通常应维护两个队列:一个存放尚未发送的工作,另一个存放已经发送但尚未处理结果的工作。套接字可写时,应继续发送工作;套接字可读时,应读取并处理结果,将其与相应结果队列中的下一个…交错处理结果与发送查询 产生 XML 内容章节正文PG189.15.1. 产生 XML 内容有一组函数和类函数的表达式可以用来从 SQL 数据产生 XML 内容。它们特别适合于将查询结果格式化成 XML 文档以便于在客户端应用中处理。产生 XML 内容 产生输出的函数章节正文PG1847.6.5. 产生输出的函数为了真正产生输出,输出插件可以在 StringInfo 输出缓冲区 ctx->out 中写入数据,此时位于 begin_cb、commit_cb 或 change_cb 回调内部。写入输出缓冲区之前,必须先调用 OutputPluginPrepareWrite(ctx, last_write);写完缓冲区之后,必须调用 OutputPluginWr…产生输出的函数 什么也不做章节正文PG1841.5.6. 什么也不做有时一个什么也不做的占位语句也很有用。例如,它能够指示 if/then/else 链中故意留出的空分支。可以使用 NULL 语句达到这个目的:NULL; 例如,下面的两段代码是等价的:BEGIN y := x / 0; EXCEPTION WHEN division_by_zero THEN NULL; -- 忽略错误 END; BEGIN y := …什么也不做 什么时候记录日志章节正文PG1819.8.2. 什么时候记录日志 log_min_messages (enum) # 控制将哪些消息级别写入服务器日志。有效值为 DEBUG5,DEBUG4,DEBUG3,DEBUG2,DEBUG1,INFO,NOTICE,WARNING,ERROR,LOG,FATAL 和 PANIC。每个级别包括其后的所有级别。级别越高,发送到日志的消息越少。默认值为 WARNING。请注意…什么时候记录日志 什么是 JIT 编译?章节正文PG1830.1. 什么是 JIT 编译?即时(Just-In-Time,JIT)编译是在运行时将某种形式的解释式程序求值转换为原生程序的过程。例如,计算某个特定的 SQL 谓词(如 WHERE a.col = 3)时,可以生成一个专用于该表达式、由 CPU 原生执行的函数,以取代能够对任意 SQL 表达式求值的通用代码,从而加快执行速度。当 PostgreSQL 使用 --with-…什么是 JIT 编译? 什么是 PostgreSQL?章节正文PG181. 什么是 PostgreSQL?PostgreSQL 是一种基于 POSTGRES, Version 4.2 的对象关系数据库管理系统(ORDBMS),后者由加州大学伯克利分校计算机科学系开发。POSTGRES 首创了许多概念,而这些概念直到很久之后才在某些商业数据库系统中出现。PostgreSQL 是这套原始伯克利代码的开源后继版本。它支持 SQL 标准中的很大一部分,并…什么是 PostgreSQL? 什么是文档?章节正文PG1812.1.1. 什么是文档?文档是全文检索系统中的搜索单位,例如一篇杂志文章或一封电子邮件。文本检索引擎必须能够解析文档,并保存词位(关键字)与其所属文档之间的关联。随后,就可以利用这些关联来搜索包含查询词的文档。在 PostgreSQL 中进行搜索时,文档通常是数据库表某一行中的一个文本字段,或者是这类字段的组合(串接),这些字段可能分布在多个表里,也可能是动态取得的。换句话…什么是文档? 仅支持 BY VALUE 传递机制章节正文PG18D.3.2.1. 仅支持 BY VALUE 传递机制 SQL 标准定义了两种传递机制,适用于从 SQL 向 XML 函数传递 XML 参数,或在接收结果时使用:BY REF 表示某个特定 XML 值保留其节点身份,BY VALUE 表示传递 XML 的内容,但不保留节点身份。该机制既可以写在参数列表之前,作为所有参数的默认机制,也可以写在任一参数之后,以覆盖默认机制。为了说明其…仅支持 BY VALUE 传递机制 仅索引扫描和覆盖索引章节正文PG1811.9. 仅索引扫描和覆盖索引 PostgreSQL 中的所有索引都是二级索引,也就是说,每个索引都与表的主数据区分开存储(在 PostgreSQL 术语中,这个主数据区称为表的堆)。这意味着,在普通索引扫描中,每次取回一行都需要同时从索引和堆中取数据。此外,尽管满足某个可索引 WHERE 条件的索引项通常在索引中彼此接近,但它们引用的表行却可能分布在堆中的任何位置。因此,索…仅索引扫描和覆盖索引 从 Oracle PL/SQL 移植章节正文PG1841.13. 从 Oracle PL/SQL 移植这一节解释了 PostgreSQL 的 PL/pgSQL 语言和 Oracle 的 PL/SQL 语言之间的差别,用以帮助那些从 Oracle®向 PostgreSQL 移植应用的人。PL/pgSQL 在许多方面都与 PL/SQL 类似。它是一种具有块结构的命令式语言,所有变量都必须声明。赋值、循环和条件语句也都很相似。在从 P…从 Oracle PL/SQL 移植 从 PL/Perl 访问数据库章节正文PG1843.3.1. 从 PL/Perl 访问数据库可以通过下列函数在 Perl 函数中访问数据库本身:从 PL/Perl 访问数据库
更多结果

输入名称或关键词,从 PostgreSQL 手册与扩展目录中直接找到定义。

pg17: 限定版本 ex: 只搜扩展 ↑↓ 选择 ↵ 打开