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

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

PostgreSQL 文档检索

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

常用条目12360
使用命名记法章节正文PG184.3.2. 使用命名记法在命名记法中,每个参数名都使用 => 与其参数表达式分隔。例如:SELECT concat_lower_or_upper(a => 'Hello', b => 'World'); concat_lower_or_upper ----------------------- hello world (1 row) 同样,uppercase 参数被省略,因此…使用命名记法 使用外部 C 模块的 C++ 应用开发章节正文PG1834.13.2. 使用外部 C 模块的 C++ 应用开发了解 ecpg 预处理器在 C++ 中的这些技术限制后,可能会认为:在链接阶段将 C 和 C++ 的目标文件链接起来,使 C++ 应用能够使用 ECPG 功能,会比直接在 C++ 代码中编写嵌入式 SQL 命令更好。本节用一个简单示例介绍如何将嵌入式 SQL 命令与 C++ 应用代码分离。在这个示例中,应用用 C++ 实现…使用外部 C 模块的 C++ 应用开发 使用客户端证书章节正文PG1818.9.3. 使用客户端证书若要要求客户端提供受信任的证书,请把你信任的根证书颁发机构(CA)证书放入数据目录中的某个文件里,在 postgresql.conf 中把参数 ssl_ca_file 设为该文件名,并在 pg_hba.conf 中相应的 hostssl 行上添加认证选项 clientcert=verify-ca 或 clientcert=verify-full。这…使用客户端证书 使用持续归档备份进行恢复章节正文PG1825.3.5. 使用持续归档备份进行恢复现在,最坏的情况发生了,你需要通过备份进行恢复。步骤如下:如果服务器仍在运行,就先停止它。 如果你有足够空间,请把整个集簇数据目录以及所有表空间复制到临时位置,以备后续需要。注意,这一预防措施要求系统有足够空闲空间来保存现有数据库的两份副本。如果空间不够,至少也应保存集簇 pg_wal 子目录中的内容,因为其中可能包含系统停机前尚未归档的…使用持续归档备份进行恢复 使用探针章节正文PG1827.5.3. 使用探针下面的示例展示了一个分析系统中事务计数的 DTrace 脚本,可以用来代替一次性能测试之前和之后的 pg_stat_database 快照:!/usr/sbin/dtrace -qs postgresql$1:::transaction-start { @start["Start"] = count(); self->ts = timestamp; } …使用探针 使用描述符区域章节正文PG1834.7. 使用描述符区域 SQL 描述符区域是一种处理 SELECT、FETCH 或 DESCRIBE 语句结果的高级方法。SQL 描述符区域将一行数据及其元数据项组合到一个数据结构中。在执行动态 SQL 语句时,结果列的性质可能无法提前获知,此时元数据特别有用。PostgreSQL 提供两种使用描述符区域的方式:命名 SQL 描述符区域和 C 结构体 SQLDA。使用描述符区域 使用方式章节正文PG185.10.6. 使用方式模式可以用多种方式来组织数据。模式的安全使用方式可以防止不受信任的用户改变其他用户查询的行为。当数据库没有采用模式的安全使用方式时,希望安全地查询该数据库的用户就必须在每个会话开始时先采取保护措施。具体来说,他们会在每个会话开始时把 search_path 设为空字符串,或者以其他方式从 search_path 中移除那些允许非超级用户写入的模式。下面有…使用方式 使用显式阻塞锁强制一致性章节正文PG1813.4.2. 使用显式阻塞锁强制一致性当存在非可串行化写入时,要确保某一行当前仍然有效,并保护它不受并发更新影响,就必须使用 SELECT FOR UPDATE、SELECT FOR SHARE 或适当的 LOCK TABLE 语句。(SELECT FOR UPDATE 和 SELECT FOR SHARE 只锁定返回的行以防止并发更新,而 LOCK TABLE 会锁住整张表…使用显式阻塞锁强制一致性 使用更新脚本安装扩展章节正文PG1836.17.5. 使用更新脚本安装扩展一个存在已久的扩展很可能会有多个版本,因此作者需要为其编写更新脚本。例如,如果你发布过 foo 扩展的 1.0、1.1 和 1.2 版本,那么就应当有更新脚本 foo--1.0--1.1.sql 和 foo--1.1--1.2.sql。在 PostgreSQL 10 之前,还必须额外创建新的脚本文件 foo--1.1.sql 和 foo--…使用更新脚本安装扩展 使用混合记法章节正文PG184.3.3. 使用混合记法混合记法结合了位置记法和命名记法。不过,如前所述,命名参数不能出现在位置参数之前。例如:SELECT concat_lower_or_upper('Hello', 'World', uppercase => true); concat_lower_or_upper ----------------------- HELLO WORLD (1 row) …使用混合记法 使用游标章节正文PG1834.3.2. 使用游标要读取包含多行的结果集,应用程序必须声明一个游标,并从中逐行取出数据。使用游标的步骤如下:声明游标、打开游标、从中取出一行、重复取行,最后关闭游标。使用游标选择:EXEC SQL DECLARE foo_bar CURSOR FOR SELECT number, ascii FROM foo ORDER BY ascii; EXEC SQL OPEN f…使用游标 使用游标章节正文PG1841.7.3. 使用游标一旦一个游标已经被打开,那么就可以用这里描述的语句操作它。这些操作不必发生在最初打开该游标的同一个函数中。你可以从函数中返回一个 refcursor 值,让调用者来操作该游标。(在内部,refcursor 值只是一个所谓 portal 的字符串名称,该 portal 包含了该游标活动查询的状态。这个名称可以被传递、赋给其他 refcursor 变量等等,…使用游标 使用示例章节正文PG18F.18.2. 使用示例许多数据库系统都有多对多表这一概念。这样的表通常位于两个带索引的表之间,例如:CREATE TABLE left_table (id INT PRIMARY KEY, ...); CREATE TABLE right_table (id INT PRIMARY KEY, ...); CREATE TABLE many_to_many(id_left IN…使用示例 使用管道模式章节正文PG1832.5.1. 使用管道模式要使用管道,应用程序必须通过 PQenterPipelineMode 将连接切换到管道模式。可用 PQpipelineStatus 检查管道模式是否已启用。在管道模式下,只允许使用扩展查询协议的异步操作,不允许命令字符串包含多个 SQL 命令,也不允许 COPY。调用同步命令执行函数,例如 PQfn、PQexec、PQexecParams、PQpre…使用管道模式 使用继承的分区章节正文PG185.12.3. 使用继承的分区虽然内置的声明式分区适合于大部分常见的用例,但还是有一些场景需要更加灵活的方法。分区可以使用表继承来实现,这能够带来一些声明式分区不支持的特性,例如:对声明式分区来说,分区必须具有和分区表正好相同的列集合,而在表继承中,子表可以有父表中没有出现过的额外列。 表继承允许多继承。 声明式分区只支持范围、列表和 hash 分区,而表继承允许按用户选择的方…使用继承的分区 依赖跟踪章节正文PG185.15. 依赖跟踪当我们创建涉及许多带外键约束的表、视图、触发器、函数等对象的复杂数据库结构时,我们隐式地创建了一张对象之间的依赖关系网。例如,具有一个外键约束的表依赖于它所引用的表。为了保证整个数据库结构的完整性,PostgreSQL 确保我们无法删除仍然被其他对象依赖的对象。例如,尝试删除第 5.5.5 节中的产品表会导致一个如下的错误消息,因为有订单表依赖于产品表:DR…依赖跟踪 信任认证章节正文PG1820.4. 信任认证当 trust 认证被指定时,PostgreSQL 假设任何可以连接到服务器的人都被授权使用他们指定的任何数据库用户名(即使是超级用户)访问数据库。当然,在 database 和 user 列中设置的限制仍然适用。只有当在操作系统层对进入服务器的连接有足够保护时,才应该使用这种方法。trust 认证对于单用户工作站的本地连接是非常合适和方便的。通常它本身不适…信任认证 修复损坏章节正文PG18F.1.4. 修复损坏 amcheck 报告的与损坏有关的错误都不应是误报。amcheck 会在那些按定义绝不应该发生的情况下抛出错误,因此通常需要对 amcheck 错误进行仔细分析。对于 amcheck 检测到的问题,并不存在通用的修复方法。应当查明导致不变式遭到破坏的根本原因。在诊断 amcheck 检测到的损坏时,pageinspect 可能会发挥有用作用。REINDE…修复损坏 修改列的数据类型章节正文PG185.7.6. 修改列的数据类型为了将一个列转换为一种不同的数据类型,使用如下命令:ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2); 只有当列中的每一个项都能通过一个隐式类型转换为新的类型时该操作才能成功。如果需要一种更复杂的转换,应该加上一个 USING 子句来指定应该如何把旧值转换为新值。PostgreSQ…修改列的数据类型 修改复合类型章节正文PG188.16.4. 修改复合类型下面是一些插入和更新复合列时正确语法的示例。先看插入或更新整个列值的情况:INSERT INTO mytab (complex_col) VALUES((1.1,2.2)); UPDATE mytab SET complex_col = ROW(1.1,2.2) WHERE ...; 第一个示例省略了 ROW,第二个示例使用了它;两种写法都可以。我们…修改复合类型 修改数组章节正文PG188.15.4. 修改数组数组值可以被整体替换:UPDATE sal_emp SET pay_by_quarter = '{25000,25000,27000,27000}' WHERE name = 'Carol'; 或者使用 ARRAY 表达式语法:UPDATE sal_emp SET pay_by_quarter = ARRAY[25000,25000,27000,2700…修改数组 修改表章节正文PG185.7. 修改表创建表之后,如果你意识到自己犯了错误,或者应用需求发生了变化,可以删掉表再重新创建。但如果表中已经有数据,或者该表已被其他数据库对象引用(例如被外键约束引用),这样做就不方便了。因此,PostgreSQL 提供了一组命令来修改现有表。注意,这在概念上不同于修改表中保存的数据:这里关注的是修改表的定义,也就是表的结构。利用这些命令,我们可以:增加列 移除列 增加约…修改表 值存储章节正文PG1810.4. 值存储要插入表中的值会按照以下步骤转换为目标列的数据类型。值存储的类型转换 检查是否与目标类型精确匹配。 否则,尝试把表达式转换为目标类型。如果这两种类型之间在 pg_cast 目录中登记了赋值类型转换(见 CREATE CAST),就可以这样做。另一种情况是,如果表达式是 unknown 类型字面量,则会把字符串字面量的内容送入目标类型的输入转换例程。 检查目标类…值存储 值表达式章节正文PG184.2. 值表达式值表达式被用于各种各样的环境中,例如在 SELECT 命令的目标列表中,作为 INSERT 或 UPDATE 中的新列值,或者作为若干命令中的搜索条件。为了与表表达式(其结果是一张表)区分开来,值表达式的结果有时被称为标量。因此,值表达式也称为标量表达式(甚至简称为表达式)。表达式语法允许使用算术、逻辑、集合以及其他操作,从基本部分计算出值。一个值表达式是下列…值表达式 停止服务器章节正文PG18停止服务器要停止服务器,可使用:$ pg_ctl stop -m 选项允许控制服务器如何关闭:$ pg_ctl stop -m smart停止服务器 停用词章节正文PG1812.6.1. 停用词停用词是非常常见、几乎出现在每个文档中的词,没有区分价值。因此,在全文检索中可以忽略它们。例如,每篇英文文本都包含像 a 和 the 这样的词,所以把它们存储在索引中没有用处。不过,停用词确实会影响 tsvector 中的位置,而这又会影响排名:SELECT to_tsvector('english', 'in the list of stop words…停用词 儒略日章节正文PG18B.7. 儒略日儒略日系统是一种为天数编号的方法。它与儒略历并无关系,只是名称容易让人误以为二者有关。儒略日系统由法国学者 Joseph Justus Scaliger(1540–1609)发明,其名称大概取自他的父亲、意大利学者 Julius Caesar Scaliger(1484–1558)。在儒略日系统中,每一天都有一个连续编号,从 JD 0 开始(有时就称为儒略日)。…儒略日 元命令章节正文PG18元命令你输入到 psql 中的任何以未加引号的反斜线开始的东西都是一个 psql 元命令,它们由 psql 自行处理。这些命令让 psql 对管理和编写脚本更有用。元命令常常被称作斜线或者反斜线命令。psql 命令的格式是用反斜线后面直接跟上一个命令动词,然后是一些参数。参数与命令动词和其他参数之间用任意多个空白字符分隔开。要在参数中包含空白,可以用单引号将它括起来。要在参数中…元命令 元组章节正文PG18元组每个元组都以一个 16 位整数计数开头,用于表示该元组中的字段数。(目前,一个表中的所有元组都应有相同的计数,但这未必永远如此。)随后,对元组中的每个字段,都会有一个 32 位长度字,后跟相应字节数的字段数据。(长度字不包括其本身,且可以为零。)特殊情况下,-1 表示一个 NULL 字段值;在 NULL 情况下,后面不会跟随任何值字节。字段之间没有对齐填充或任何其他额外数据…元组 先前版本章节正文PG18E.7. 先前版本先前各发布分支的发布说明可在 https://www.postgresql.org/docs/release/找到。先前版本 全文检索集成章节正文PG18F.35.5. 全文检索集成与全文索引结合使用时,三字符组匹配是非常有用的工具。尤其是,它有助于识别那些因拼写错误而无法被全文检索机制直接匹配的输入词。第一步是生成一个辅助表,其中包含文档中的所有不重复的词:CREATE TABLE words AS SELECT word FROM ts_stat('SELECT to_tsvector(''simple'', bodytex…全文检索集成 公共模式章节正文PG185.10.2. 公共模式在前面的小节中,我们创建表时都没有指定模式名。默认情况下,这些表(以及其他对象)会自动放入名为“public”的模式中。每个新数据库都包含这样一个模式。因此,下面两条命令是等效的:CREATE TABLE products ( ... ); 以及:CREATE TABLE public.products ( ... );公共模式 公共表表达式物化章节正文PG187.8.3. 公共表表达式物化 WITH 查询的一个有用特性是,在父查询每次执行时,它通常只会被计算一次,即使父查询或同级的 WITH 查询对它有多次引用也是如此。因此,在多个地方都需要的昂贵计算可以放进一个 WITH 查询中,以避免重复工作。另一个可能的用途是防止带副作用的函数被意外执行多次。不过,问题的另一面是,如果某个 WITH 查询被多次引用,优化器就无法把父查询中的限…公共表表达式物化 公共选项章节正文PG18公共选项 pgbench 还接受以下用于连接参数及其他通用设置的命令行参数:--debug # 打印调试输出。 -h hostname--host=hostname # 数据库服务器的主机名。 -p port--port=port # 数据库服务器的端口号。 -U login--username=login # 连接时使用的用户名。 -V--version # 打印 pgben…公共选项 共享内存章节正文PG1836.10.11. 共享内存共享内存 共享内存和信号量章节正文PG1818.4.1. 共享内存和信号量 PostgreSQL 要求操作系统提供进程间通信(IPC)机制,特别是共享内存和信号量。Unix 派生系统通常提供“System V” IPC、“POSIX” IPC,或者两者兼有。Windows 对这些特性有自己的实现,这里不作讨论。默认情况下,PostgreSQL 会分配极少量的 System V 共享内存,以及大量匿名的 mmap 共享内…共享内存和信号量 共享库章节正文PG1817.5.1. 共享库在某些使用共享库的系统上,你需要告诉系统如何找到新安装的共享库。不需要这样做的系统包括 FreeBSD、Linux、NetBSD、OpenBSD 和 Solaris。设置共享库搜索路径的方法因平台而异,但最常见的方法是按如下方式设置环境变量 LD_LIBRARY_PATH。对于 Bourne shell(sh、ksh、bash、zsh):LD_LIBRAR…共享库 共享库预载入章节正文PG1819.11.3. 共享库预载入为了载入附加的功能或者达到提高性能的目的,可用多个设置来预先载入共享库到服务器中。例如'$libdir/mylib' 设置会使 mylib.so(或者某些平台上的 mylib.sl)从安装的标准库目录被预装载。这些设置之间的区别在于生效的时间以及改变它们所需的权限。可以用这个方法预装载 PostgreSQL 的过程语言库,通常是使用'$libdir…共享库预载入 共享数据章节正文PG1844.3. 共享数据全局字典 SD 可用于在同一函数的多次调用之间保存私有数据。全局字典 GD 则是可供一个会话中的所有 Python 函数使用的公共数据;使用时要小心。每个函数在 Python 解释器中都有自己的执行环境,因此 myfunc 中的全局数据和函数参数对 myfunc2 不可见。例外是前面提到的 GD 字典中的数据。共享数据 关于 pg_dump 的一些注记章节正文PG1814.4.9. 关于 pg_dump 的一些注记由 pg_dump 生成的转储脚本会自动应用上面若干条指导原则,但并非全部。若要尽可能快速地还原 pg_dump 的转储,仍需手动做一些额外操作。(注意,这些要点适用于还原转储,而不是创建转储。无论是使用 psql 加载文本转储,还是使用 pg_restore 从 pg_dump 归档文件加载,相关要点都是一样的。)默认情况下,p…关于 pg_dump 的一些注记
更多结果

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

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