自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(506)
  • 收藏
  • 关注

原创 PostgreSQL教程(四十四):参考命令(三)之服务器应用

pg_archivecleanup被设计用作在作为后备服务器运行时来清理 WAL 文件归档。pg_archivecleanup也可以被用作一个单独的程序来清理 WAL 文件归档。要配置一个后备服务器以使用pg_archivecleanup,把下面 的内容放在其中archivelocation是要从中移除 WAL 段文件的目录。当被用在中时,所有逻辑上在%r参数的值之前的 WAL 文件都将被从 archivelocation移除。这能最小化需要被保留的文件数量, 同时能保留崩溃后重启的能力。

2024-03-18 17:16:57 761

原创 PostgreSQL教程(四十三):参考命令(二)之客户端应用

这部份包含PostgreSQL客户端应用和工具的参考信息。不是所有这些命令都是通用工具,某些需要特殊权限。这些应用的共同特征是它们可以被运行在任何主机上,而不管数据库服务器在哪里。当在命令行上指定用户和数据库名时,它们的大小写会被保留 — 空格或特殊字符的出现可能需要使用引号。表名和其他标识符的大小写不会被保留并且可能需要使用引号。1、clusterdbclusterdb — 聚簇一个PostgreSQL数据库大纲clusterdb [connection-option

2024-03-18 15:19:57 987

原创 PostgreSQL教程(四十二):参考命令(一)之SQL命令

1、ABORTABORT — 中止当前事务大纲ABORT [ WORK | TRANSACTION ]描述ABORT回滚当前事务并且导致由该事务所作的所有更新被丢弃。这个命令的行为与标准SQL命令ROLLBACK的行为一样,并且只是为了历史原因存在。参数 WORK TRANSACTION可选关键词。它们没有效果。注解使用COMMIT成功地终止一个事务。在一个事务块

2024-03-13 18:02:31 858

原创 PostgreSQL教程(四十一):服务器编程(二)之 规则系统

本章讨论PostgreSQL中的规则系统。产生规则系统的概念很简单,但是在实际使用的时候会碰到很多细节问题。某些其它数据库系统定义活动的数据库规则,通常是存储过程和触发器。在PostgreSQL中,这些东西可以通过函数和触发器来实现。规则系统(更准确地说是查询重写规则系统)与存储过程和触发器完全不同。它把查询修改为需要考虑规则,并且然后把修改过的查询传递给查询规划器进行规划和执行。它非常强大,并且可以被用于许多东西如查询语言过程、视图和版本。

2024-03-12 17:43:36 935

原创 PostgreSQL教程(四十):服务器编程(一)之 触发器

一个触发器声明了当执行一种特定类型的操作时数据库应该自动执行一个特殊的函数。触发器可以被附加到表(分区的或者不分区的)、视图和外部表。在表和外部表上触发器可以被定义为在INSERTUPDATE或DELETE操作之前或之后被执行, 可以为每个SQL语句被执行一次或者为每个修改的行 被执行一次。UPDATE触发器可以进一步地设置为只针对UPDATE语句的SET子句的特定列出发。触发器也可以被TRUNCATE语句触发。如果一个触发器事件发生, 触发器函数会在适当的事件被调用来处理该事件。在视图上。

2024-03-12 16:38:13 860

原创 PostgreSQL教程(三十九):客户端接口(三)之 信息模式

信息模式由一组视图构成,它们包含定义在当前数据库中对象的信息。信息模式以 SQL 标准定义,因此能够被移植并且保持稳定 — 系统目录则不同,它们是与PostgreSQL相关的并且是为了实现的考虑而建模的。不过,信息模式视图不包含与PostgreSQL-相关特性有关的信息。要咨询那些信息你需要查询系统目录或其他PostgreSQL-相关视图。当在数据库中查询约束信息时,一个期望返回一行的标准兼容的查询可能返回多行。这是因为 SQL 标准要求约束名在一个模式中唯一,但是PostgreSQL并不强制这种限制。

2024-03-12 15:39:01 1134

原创 PostgreSQL教程(三十八):客户端接口(二)之 大对象

所有的大对象都存在一个名为的系统表中。每一个大对象还在系统表中有一个对应的项。大对象可以通过类似于标准文件操作的读/写API来进行创建、修改和删除。PostgreSQL也支持一种称为"TOAST"的存储系统, 它自动把大于一个数据库页的值存储到一个二级存储区域,每一个表都有专属的二级存储区域。这使得大对象功能显得有些陈旧。但是大对象功能仍然有一个优势是能够支持高达4TB的值,而TOAST域只能支持最大1GB。

2024-03-12 14:23:37 822

原创 PostgreSQL教程(三十七):客户端接口(一)之 libpq - C 库

一、数据库连接控制函数下面的函数处理与PostgreSQL服务器联接的事情。 一个应用程序一次可以与多个服务器建立联接。 (这么做的原因之一是访问多于一个数据库。) 每个连接都是用一个从函数PQconnectdb、PQconnectdbParams或PQsetdbLogin获得的PGconn对象表示。 注意,这些函数总是返回一个非空的对象指针,除非存储器少得连个PGconn对象都分配不出来。在把查询发送给连接对象之前, 可以调用PQstatus函数来检查一下返回值看看连接是否成功。警告:

2024-03-12 14:00:22 922

原创 PostgreSQL教程(三十六):服务器管理(十八)之回归测试

回归测试是PostgreSQL中对于 SQL 实现的一组综合测试集。它们测试标准 SQL 操作以及PostgreSQL的扩展能力。

2024-03-11 15:50:28 881

原创 PostgreSQL教程(三十五):服务器管理(十七)之即时编译(JIT)

即时(Just-In-Time,JIT)编译是将某种形式的解释程序计算转变成原生程序的过程,并且这一过程是在运行时完成的。例如,与使用能够计算任意SQL表达式的通用代码来计算一个特定的SQL谓词(如)不同,可以产生一个专门针对该表达式的函数并且可以由CPU原生执行,从而得到加速。当使用编译PostgreSQL后,PostgreSQL内建支持用LLVM执行JIT编译。进一步的细节请参考。

2024-03-11 15:36:49 734

原创 PostgreSQL教程(三十四):服务器管理(十六)之逻辑复制

逻辑复制是一种基于数据对象的复制标识(通常是主键)复制数据对象及其更改的方法。我们使用术语“逻辑”来与物理复制加以区分,后者使用准确的块地址以及逐字节的复制方式。PostgreSQL两种机制都支持。逻辑复制允许在数据复制和安全性上更细粒度的控制。逻辑复制使用一种发布和订阅模型,其中有一个或者更多订阅者订阅一个发布者节点上的一个或者更多发布。订阅者从它们所订阅的发布拉取数据并且可能后续重新发布这些数据以允许级联复制或者更复杂的配置。

2024-03-11 15:26:26 987

原创 PostgreSQL教程(三十三):服务器管理(十五)之可靠性和预写式日志

本章解释预写式日志如何用于获得有效的、可靠的操作。

2024-03-11 15:15:20 845

原创 PostgreSQL教程(三十二):服务器管理(十四)之监控磁盘使用

本章讨论如何监控PostgreSQL数据库系统的磁盘使用情况。

2024-03-11 15:00:06 557

原创 PostgreSQL教程(三十一):服务器管理(十三)之监控数据库活动

开发者可以在代码中任意位置定义新的探针,当然这要重新编译之后才能生效。下面是插入新探针的步骤:决定探针名称以及探针可用的数据把该探针定义加入到如果pg_trace.h还不存在于包含该探针点的模块中,包括它,并且在源代码中期望的位置插入探针宏重新编译并验证新探针是可用的例子:.这里是一个如何增加一个探针来用事务 ID 追踪所有新事务的例子。决定探针将被命名为并且需要一个类型的参数将该探针定义加入到注意探针名字中双下划线的使用。

2024-03-11 14:52:22 833

原创 PostgreSQL教程(三十):服务器管理(十二)之恢复配置

这一章描述文件中可用的设置。它们只应用于恢复期。对于你希望执行的任意后续恢复,它们必须被重置。一旦恢复已经开始,它们就不能被更改。中的设置以形式指定。每一行指定一个参数。井号()表示行的剩余部分是一段注释。要在一个参数值中嵌入一个单引号,将其双写(''作为一个例子文件,被放置在安装的share/目录中。

2024-03-11 14:14:22 866

原创 PostgreSQL教程(二十九):服务器管理(十一)之高可用、负载均衡和复制

数据库服务器可以一起工作,这样如果主要的服务器失效则允许一个第二服务器快速接手它的任务(高可用性),或者可以允许多个计算机提供相同的数据(负载均衡)。理想情况下,数据库服务器能够无缝地一起工作。提供静态网页服务的网页服务器可以非常容易地通过把网页请求均衡到多个机器来组合。事实上,只读的数据库服务器也可以相对容易地组合起来。不幸的是,大部分数据库服务器收到的请求是读/写混合的,并且读/写服务器更难于组合。

2024-03-11 14:03:56 1080

原创 PostgreSQL教程(二十八):服务器管理(十)之备份和恢复

如果PostgreSQL所在的系统上安装了zlib压缩库,自定义转储格式将在写出数据到输出文件时对其压缩。这将产生和使用。

2024-03-11 11:02:39 914

原创 PostgreSQL教程(二十七):服务器管理(九)之日常数据库维护工作

和任何数据库软件一样,PostgreSQL需要定期执行特定的任务来达到最优的性能。这里讨论的任务是必需的,但它们本质上是重复性的并且可以很容易使用cron脚本或Windows的任务计划程序等标准工具来自动进行。建立合适的脚本并检查它们是否成功运行是数据库管理员的职责。一个显而易见的维护任务是定期创建数据的后备拷贝。如果没有一个最近的备份,你就不可能在灾难(磁盘失败、或在、错误地删除一个关键表等)后进行恢复。PostgreSQL中的备份和恢复机制在教程二十八中有详细的介绍。

2024-03-11 10:07:48 799

原创 PostgreSQL教程(二十六):服务器管理(八)之本地化

区域支持是在使用initdb创建一个数据库集簇时自动被初始化的。默认情况下,initdb将会按照它的执行环境的区域设置初始化数据库集簇;因此如果你的系统已经设置为你的数据库集簇想要使用的区域, 那么你就没有什么可干的。如果你想使用其它的区域(或者你还不知道你的系统设置的区域是什么),那么你可以用--locale选项准确地告诉initdb你要用哪一个区域。这个Unix系统上的例子把区域设置为瑞典(SE)瑞典语(sv其他的可能性包括en_US(美国英语)和fr_CA(加拿大法语)。

2024-03-11 09:42:57 881

原创 PostgreSQL教程(二十五):服务器管理(七)之管理数据库

一个数据库是一些SQL对象(“数据库对象”)的命名集合。通常每个数据库对象(表、函数等) 属于并且只属于一个数据库(不过有几个系统表如属于整个集簇并且对集簇中的每个数据库都是可访问的)。更准确地说,一个数据库是一个模式的集合, 而模式包含表、函数等等。因此完整的层次是这样的:服务器、数据库、模式、表(或者某些其他对象类型,如函数)。当连接到数据库服务器时,客户端必须在它的连接请求中指定它要连接的数据库名。每次连接不能访问超过一个数据库。不过,一个应用能够在同一个或者其他数据库上打开的连接数并没有受到限制。

2024-03-08 17:48:09 1051

原创 PostgreSQL教程(二十四):服务器管理(六)之数据库角色

PostgreSQL使用角色的概念管理数据库访问权限。一个角色可以被看成是一个数据库用户或者是一个数据库用户组,这取决于角色被怎样设置。角色可以拥有数据库对象(例如,表和函数)并且能够把那些对象上的权限赋予给其他角色来控制谁能访问哪些对象。此外,还可以把一个角色中的成员资格授予给另一个角色,这样允许成员角色使用被赋予给另一个角色的权限。角色的概念把“用户”和“组”的概念都包括在内。在PostgreSQL版本 8.1 之前,用户和组是完全不同的两种实体,但是现在只有角色。

2024-03-08 17:30:21 1089

原创 PostgreSQL教程(二十三):服务器管理(五)之客户端认证

当一个客户端应用连接一个数据库服务器时,它将指定以哪个PostgreSQL数据库用户名连接,就像我们以一个特定用户登录一台 Unix 计算机一样。在 SQL 环境中,活动的数据库用户名决定对数据库对象的访问权限 — 详见教程二十四。因此,它本质上是哪些数据库用户可以连接。注意:如教程二十四中所释,PostgreSQL实际上以“角色”来进行权限管理。在本章中,我们用数据库用户表示“拥有LOGIN权限的角色”。认证是数据库服务器建立客户端身份的过程,并且服务器决定客户端应用(或者运行客户端应用

2024-03-08 17:02:54 960

原创 PostgreSQL教程(二十二):服务器管理(四)之服务器配置

这个特性被设计用来由附加模块向PostgreSQL添加通常不为系统知道的参数(例如过程语言)。这允许使用标准方法配制扩展模块。自定义选项有两部分名称:一个扩展名,然后是一个句点,再然后是正确的参数名,就像 SQL 中的合格名称。一个例子是。因为自定义选项可能需要在没有载入相关扩展模块的进程中设置,PostgreSQL将接收任意两部分参数名的设置。这种变量被认为是占位符并且在定义它们的模块被载入之前不会有实际功能。

2024-03-08 16:19:11 890

原创 PostgreSQL教程(二十一):服务器管理(三)之服务器设置和操作

本章讨论如何设置和运行数据库服务器,以及它与操作系统的交互。

2024-03-01 15:08:34 1159

原创 PostgreSQL教程(二十):服务器管理(二)之在windows上从源代码安装

对于大部分用户,推荐下载Windows的二进制发布,它在PostgreSQL 的网站上作为一个图形化安装包可供下载。从源代码构建的方式只适合于希望开发或者扩展 PostgreSQL的人们。有多种不同的方式可以在Windows上构建PostgreSQL。用微软工具进行构建的最简单方式是安装 Visual Studio Express 2017 for Windows Desktop并使用其中包含的编译器。也可以使用完整的Microsoft Visual C++ 2005到2017来构建。

2024-03-01 11:00:34 832

原创 PostgreSQL教程(十九):服务器管理(一)之从源代码安装

本章的内容描述从源代码发布安装PostgreSQL(如果你安装的是打包好的版本如RPM或Debian包,那么请略过这一章并且阅读打包者的指导)。

2024-02-29 16:13:52 926

原创 PostgreSQL教程(十八):SQL语言(十一)之并行查询

一般而言,如果一个函数是受限或者不安全的却被标记为安全,或者它实际是不安全的却被标记为受限,把它用在并行查询中时可能会抛出错误或者产生错误的回答。,即它必须被构建出来,这样每一个执行该计划的进程将以无重复地方式产生输出行的一个子集,即保证每一个所需要的输出行正好只被一个合作进程生成。节点被用在并行计划中时,每个进程将按照子计划出现的顺序执行子计划,这样所有的参与进程会合作执行第一个子计划直到它被完成,然后同时移动到第二个计划。并行受限的操作不能在并行工作者中执行,但是能够在并行查询的领导者中执行。

2024-02-29 14:33:48 821

原创 PostgreSQL教程(十七):SQL语言(十)之性能提示

但是,限制结点在检索到这些行的五分之一后就会停止,因此它的总开销只是索引扫描结点的五分之一,并且这是查询的实际估计开销。为清楚起见,在更新节点上标注了将被更新 的相关目标表,显示的顺序与相应的子计划相同(这些标注是从 PostgreSQL 9.5 开始新增的,在以前的版本中读者必须通过 观察子计划才能知道这些目标表)。更重要的是,当你在已有外键约束的情况下向表中载入数据时, 每个新行需要一个在服务器的待处理触发器事件(因为是一个触发器的触发会检查行的外键约束)列表的条目。归并连接也有类似的现象。

2024-02-29 11:17:41 1015

原创 PostgreSQL教程(十六):SQL语言(九)之并发控制

PostgreSQL为开发者提供了一组丰富的工具来管理对数据的并发访问。在内部,数据一致性通过使用一种多版本模型(多版本并发控制,MVCC)来维护。这就意味着每个 SQL 语句看到的都只是一小段时间之前的数据快照(一个数据库版本),而不管底层数据的当前状态。这样可以保护语句不会看到可能由其他在相同数据行上执行更新的并发事务造成的不一致数据,为每一个数据库会话提供事务隔离。MVCC避免了传统的数据库系统的锁定方法,将锁争夺最小化来允许多用户环境中的合理性能。

2024-02-28 16:56:26 825

原创 PostgreSQL教程(十五):SQL语言(八)之全文搜索

全文搜索(或者文本搜索提供了确定满足一个查询的自然语言文档的能力,并可以选择将它们按照与查询的相关度排序。最常用的搜索类型是找到所有包含给定查询词的文档并按照它们与查询的相似性顺序返回它们。查询和相似性的概念非常灵活并且依赖于特定的应用。最简单的搜索认为查询是一组词而相似性是查询词在文档中的频度。文本搜索操作符已经在数据库中存在很多年了。PostgreSQL对文本数据类型提供了~*LIKE和ILIKE操作符,但是它们缺少现代信息系统所要求的很多基本属性即使对英语也缺乏语言的支持。

2024-02-28 16:23:14 1093

原创 PostgreSQL教程(十四):SQL语言(七)之索引

在没有事前准备的情况下,系统不得不扫描整个test1表,一行一行地去找到所有匹配的项。如果test1中有很多行但是只有一小部分行(可能是0或者1)需要被该查询返回,这显然是一种低效的方式。但是如果系统被指示维护一个在id列上的索引,它就能使用一种更有效的方式来定位匹配行。例如,它可能仅仅需要遍历一棵搜索树的几层而已。类似的方法也被用于大部分非小说书籍中:经常被读者查找的术语和概念被收集在一个字母序索引中放在书籍的末尾。感兴趣的读者可以相对快地扫描索引并跳到合适的页而不需要阅读整本书来寻找感兴趣的材料。

2024-02-27 17:40:44 928

原创 PostgreSQL教程(十三):SQL语言(六)之类型转换

SQL是一种强类型语言。也就是说,每个数据项都有一个相关的数据类型,数据类型决定其行为和允许的用法。PostgreSQL有一个可扩展的类型系统,该系统比其它SQL实现更具通用和灵活。因而,PostgreSQL中大多数类型转换行为是由通用规则来管理的,而不是ad hoc启发式规则。这种做法允许使用混合类型表达式,即便是其中包含用户定义的类型。PostgreSQL扫描器/解析器只将词法元素分解成五个基本种类:整数、非整数数字、字符串、标识符、关键字。大多数非数字类型常量首先被分类为字符串。

2024-02-27 15:17:40 1016

原创 PostgreSQL教程(十二):SQL语言(五)之函数和操作符

一、逻辑操作符常用的逻辑操作符有:ANDORNOTSQL使用三值的逻辑体系。真、假和null,这是null代表“未知”。观察下面真值表:a b aANDb aORb TRUE TRUE TRUE TRUE TRUE FALSE FALSE TRUE TRUE NULL NULL TRUE FALSE FALSE FALSE FALSE FALSE NULL

2024-02-27 14:04:30 852

原创 PostgreSQL教程(十一):SQL语言(四)之数据类型

name text,如上所示,一个数组数据类型可以通过在数组元素的数据类型名称后面加上方括号([])来命名。上述命令将创建一个名为sal_emp的表,它有一个类型为text的列(name),一个表示雇员的季度工资的一维integer类型数组(),以及一个表示雇员每周日程表的二维text类型数组(schedule的语法允许指定数组的确切大小然而,当前的实现忽略任何提供的数组尺寸限制,即其行为与未指定长度的数组相同。当前的实现也不会强制所声明的维度数。

2024-02-23 17:27:09 1127

原创 PostgreSQL教程(十):SQL语言(三)之查询

从数据库中检索数据的过程或命令叫做查询。在 SQL 里SELECT命令用于指定查询。SELECT命令的一般语法是下面几个小节描述选择列表、表表达式和排序声明的细节。WITH查询等高级特性将在最后讨论。假设有一个表叫做table1,这条命令将table1中检索所有行和所有用户定义的列(检索的方法取决于客户端应用。例如,psql程序将在屏幕上显示一个 ASCII 形式的表格, 而客户端库将提供函数来从检索结果中抽取单个值)。选择列表声明意味着所有表表达式提供的列。

2024-02-22 18:02:15 1069

原创 PostgreSQL教程(九):SQL语言(二)之数据操纵

但是,我们可以通过指定一个被更新的行必须满足的条件。只有在表里面存在主键的时候(不管你声明它还是不声明它),我们才能可靠地通过选择一个匹配主键的条件来指定一个独立的行。即使你只知道几个列的值,那么你也必须创建一个完整的行。但是你也可以删除匹配条件的一组行,或者你可以一次从表中删除所有的行。它从使用给出的值从左开始填充列,有多少个给出的列值就填充多少个列,其他列的将使用缺省值。它可以包含命令的目标表的列名, 或者包含使用这些列的值表达式。你可以更新单个行,也可以更新表中所有的行,还可以更新其中的一部分行。

2024-02-22 11:48:08 735

原创 PostgreSQL教程(八):SQL语言(一)之数据定义

划分指的是将逻辑上的一个大表分成一些小的物理上的片。划分有很多益处:在某些情况下查询性能能够显著提升,特别是当那些访问压力大的行在一个分区或者少数几个分区时。划分可以取代索引的主导列、减小索引尺寸以及使索引中访问压力大的部分更有可能被放在内存中。当查询或更新访问一个分区的大部分行时,可以通过该分区上的一个顺序扫描来取代分散到整个表上的索引和随机访问,这样可以改善性能。如果批量操作的需求是在分区设计时就规划好的,则批量装载和删除可以通过增加或者去除分区来完成。执行或者使用DROP TABLE。

2024-02-21 18:21:50 943

原创 PostgreSQL教程(七):SQL语法(三)之调用函数

许带有命名参数的函数被使用位置或命名记号法调用。命名记号法对于有大量参数的函数特别有用,因为它让参数和实际参数之间的关联更明显和可靠。在位置记号法中,书写一个函数调用时,其参数值要按照它们在函数声明中被定义的顺序书写。在命名记号法中,参数根据名称匹配函数参数,并且可以以任何顺序书写。对于每一种记法,还要考虑函数参数类型的效果。在任意一种记号法中,在函数声明中给出了默认值的参数根本不需要在调用中写出。但是这在命名记号法中特别有用,因为任何参数的组合都可以被忽略。而在位置记号法中参数只能从右往左忽略。

2024-02-21 14:38:29 377

原创 PostgreSQL教程(六):SQL语法(二)之值表达式

值表达式被用于各种各样的环境中,例如在SELECT命令的目标列表中、作为INSERT或UPDATE中的新列值或者若干命令中的搜索条件。为了区别于一个表表达式(是一个表)的结果,一个值表达式的结果有时候被称为一个标量。值表达式因此也被称为标量表达式(或者甚至简称为表达式表达式语法允许使用算数、逻辑、集合和其他操作从原始部分计算值。一个值表达式是下列之一:一个常量或文字值一个列引用在一个函数定义体或预备语句中的一个位置参数引用一个下标表达式一个域选择表达式一个操作符调用。

2024-02-21 14:25:48 816

原创 PostgreSQL教程(五):SQL语法(一)之词法结构

SQL输入由一个命令序列组成。一个命令由一个记号的序列构成,并由一个分号(“;”)终结。输入流的末端也会标志一个命令的结束。具体哪些记号是合法的与具体命令的语法有关。一个记号可以是一个关键词、一个标识符、一个带引号的标识符、一个literal(或常量)或者一个特殊字符符号。记号通常以空白(空格、制表符、新行)来分隔,但在无歧义时并不强制要求如此(唯一的例子是一个特殊字符紧挨着其他记号)。

2024-02-20 18:12:46 777

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除