顶级的海报
过去两个月的职位数目
顶级队伍
过去两个月的职位数目
饲料
地球
  • 政策被列入行星PostgreSQL。
  • 添加你的博客PostgreSQL。
  • 列表所有订阅的博客。
  • 管理你的登记。
联系
  • 联系Planet PostgreSQL管理员地球在postgresql.org
当您运行一个连接了关系数据库的应用程序时,您无疑会遇到这样的问题:我应该创建哪些索引?对于我们中的一些人来说,索引是自然产生的,而B-tree、GIN和GIST是日常使用的词汇。对于我们中的一些人来说,找出要创建的索引更具挑战性,需要花费大量的时间来完成但让我们团结在一起的是,当我们在生产中使用关系数据库(如Postgres)时,创建和调整索引是我们工作的一部分。我们需要…

重置一个序列能有多难?

重新启动序列:有多难?(PostgreSQL和Oracle)

我喜欢PostgreSQL的一个原因是它让我在家里感受到:它对其对象具有非常一致和相干的界面。这样的示例,是序列的管理:改变顺序允许您对序列的每个细节进行修改,特别是重新启动它来自初始价值。
让我们看看它是如何运行的:



测试数据库=>创造序列batch_seq增量经过1开始1创建序列测试数据库=>$$声明int开始为了1..One hundred.执行nextval“批次顺序”);结束结束$$测试数据库=>选择currval“批次顺序”);currval---------One hundred.



在上面的代码中,我创建了一个batch_seq并验证它一百次,使序列的当前值保持在One hundred.

如何让序列重新开始?
第一种可能是使用setval功能:



测试数据库=>选择setval“批次顺序”1);setval--------1测试数据库=>选择currval“批次顺序”);currval---------1



另一种选择是使用改变顺序,这是一个针对这个目的(和其他人)的命令:



测试数据库=>改变,更改序列batch_seq重新启动改变序列测试数据库=>选择nextval“批次顺序”);nextval---------1



这里有一个重要的记录,是指定的唯一选项重新启动,这是序列已经知道的重新启动意思是重置为原始起始值
还可以指定重新启动的特定值:



测试数据库=>改变,更改序列batch_seq重新启动666改变序列测试数据库=>选择nextval“批次顺序”);nextval---------666



那太简单了!
上述行为保证返回到8.1PostgreSQL版本(甚至可能更早):请参阅此处的旧文档188金宝慱网站地址

等等,是什么

[...]
由Franck Pachot发布2021-09-22 21:18

假设您有一个包含一百万个insert语句和文字值的脚本。当然,这是个坏主意。SQL是语言,而不是数据交换格式。您应该有一个文件要用COPY导入,例如所有值都是CSV。或者至少,如果您非常喜欢insert语句,其中有数千行值。或者准备带参数的语句和带每个参数的调用。

然而,这是我们在现实生活中遇到的事情。我仍然记得20年前,当我看到一个移动电信账单应用程序时,供应商规范要求系统需要6个大型服务器,而这个系统最多需要1000个付费后的客户来结账。呼叫数据记录以一种非常有效的专有二进制格式来自网络移动交换中心。他们用一个C程序来解码…使用sqlplus“摄取”的纯文本INSERT语句。显然,很难想象最糟糕的设计,这是系统最关键的部分,因为它需要近乎实时的操作。当然,表现很差。你可以想象那里没有正确的错误处理。所有通话记录都是明文的,没有保安。但他们把它卖给那些不看它是如何工作的人,用漂亮的幻灯片就很容易满足。 Today, I'm convinced that, whatever the reputation of the vendor, you should not put your data on software that is not open-source. Look at the code, look at the design, and you will get a good idea of the quality of the software.

回到我们的技术解决方案,我将生成一百万条insert语句:

对于i在{1..1000000}中,请回声“插入演示(键,值)值($ i,$随机);”完成>插入.SQL.

PostgreSQL

用psql按原样加载它们不是很有效,因为它必须一个一个地发送命令,每次解析它们,并提交每一行:

时间psql<
[...]

手持黑白电子设备者"class=

在上一个帖子,我解释了如何通过使用reserved_connections范围。在此帖子中,我想介绍如何使用共享关系缓存来提高性能。

Pgpool II 4.1中增加了共享关系缓存。在解释这个特性之前,让我们先看看Pgpool II的关系缓存是什么。

什么是关系缓存?

如果Pgpool-II接收到客户端查询,Pgpool-II将解析查询并提取表名,然后访问PostgreSQL系统目录获取关系信息。Pgpool-II从PostgreSQL系统目录中获取如下信息:

  • 是否包含在查询中的表是临时表
  • 查询中包含的表是否为未标记表
  • 查询中包含的函数是否“不可变”(如果在查询中使用函数,并且启用了查询缓存模式)

如果查询中包含的表是临时表或未记录表,则PGPool-II必须将查询发送到主PostgreSQL。

为了重用从系统编目中获得的信息,Pgpool-II将信息存储在本地缓存中。如果在后续的查询中出现了相同的对象(例如table, function), Pgpool-II将从本地缓存中获取信息,而不是访问系统目录。

每个子进程将本地关系缓存存储在进程专用内存中,其他子进程无法访问进程本地关系缓存。如果为客户端请求分配了不同的进程,则该进程必须访问PostgreSQL系统目录,即使相同的表信息存储在其他子进程的本地关系缓存中。如果将较大的值设置为num_init_子项, Pgpool-II访问PostgreSQL系统目录的次数与num_init_子项,这可能会增加开销。

Pgpool-II 4.1中引入的共享关系缓存特性可以解决这个问题。

共享关系缓存

Pgpool-II可以通过启用在共享内存中创建关系缓存

[...]

从Oracle迁移到PostgreSQL已经成为一项流行的运动,许多人都希望摆脱Oracle方面的许可成本、高昂的支持成本和技术限制。从MS SQL和其他商业平台迁移到PostgreSQL的人也是如此。然而,我的印象是,从Oracle到PostgreSQL是目前最流行的路线。

关于Oracle到PostgreSQL的迁移已经有很多文章了;今天,我想分享一些在实际构建迁移工具方面的经验教训。多年来,我们尝试了许多不同的方法来创建完美的工具,而且我们在这一过程中肯定犯了一些错误——这些错误你不想重复。我决定分享我个人在这段多年旅程中的一些见解。我不能在一篇短文中完整地介绍它们,因此我在这里所做的是强调您可以利用的最有用的方法,以提高迁移效率。

交易长度很重要

如果你只是将1g或2g的数据从Oracle迁移到PostgreSQL,那么事务就不重要了。然而,如果我们讨论的是10+ TB的数据,情况就不同了。对于许多客户来说,停机不是一个选项。要实现接近于零的停机时间,您需要支持CDC(=更改数据捕获)。其思想是获取数据的初始快照,然后在目标系统(= PostgreSQL)赶上源数据库时应用更改。

实际上,这意味着我们必须从Oracle复制大量数据,而源数据库仍在进行更改。您很快就会在Oracle方面面临一个著名的问题:

ORA-01555错误消息“快照太老”

许多有迁移经验的人会痛苦地意识到这个问题。理想情况下,您需要确保正确配置Oracle以处理真实的事务,而不仅仅是短的读突发。提前教迁移者检查是有意义的

[...]

很多年后,博士后都会有一些大的支柱或主题发布。这通常是事后才想到的。所有承诺都会被看到,有人会想,“这是谈论的关键。”在博士后9.2中是这样的杰森,在9.4中是JSONB,在10中是逻辑复制,12是更广泛的性能主题。虽然我期待着这些大亮点,但在每个发布中,我同样兴奋地浏览并拔出简单地让我生活更美好的小事。

PGPool-II是一个丰富的PostgreSQL群集管理工具。要确定哪个配置最适合您的数据库群集,您需要了解参数的目的。自此博客以来,我将介绍几个有效参数以提高性能。

在这个博客中,我会解释一下reserved_connections参数,以及如何配置。

当客户端连接数超过时,该参数用于拒绝传入的客户端连接,错误消息为“对不起,客户端已经太多了”,而不是阻止它“num_init_children reserved_connections”

首先,让我描述一下为什么要添加这个参数。

控制Pgpool II 4.0及更早版本中的客户端连接数量

启动时,Pgpool-II父进程preforknum_init_子项子进程,每个子进程正在等待客户端连接。如果最大数量的并发客户端连接(值)num_init_子项)Pgpool II如何处理新请求?

Pgpool II将叠加新请求请求队列中。当一个子进程被释放,并且该进程准备再次接受一个新的连接请求时,OS将把连接请求分配给该进程。换句话说,连接请求将等待可用的子进程。

但是,如果客户机连接到Pgpool II并占用Pgpool II的子进程很长时间而不做任何事情,则操作系统队列将满,并且新的客户机请求将永远不会被接受。此外,它可能会导致服务器负载高和状态不稳定。

配置reserved_connections

因为您可以使用Pgpool-II 4.1reserved_connections参数来控制客户端连接。

默认值为0。

reserved_connections = 0

如果reserved_connections设置为1或更高,传入的客户端连接将被拒绝错误消息“抱歉,太多客户端”,而不是等待可用的过程,当客户端连接的数量超过时

[...]
发布的Andreas'广告'Scherbaum2021-09-20 14:00
采访Michael Goldberg:我来自乌拉尔山脉的一个小镇。1991年,我们一家搬到了以色列。从那以后我就住在特拉维夫。

1.概述

在我之前博客,我简要地介绍了如何在PG14中对postgres_fdw进行批量/批处理插入。在这篇博客中,我将运行一些基本测试来比较在postgres_fdw中引入批量插入之前和之后的性能,这样我们就可以大致了解这个特性是否有什么不同。

2.PG服务器设置

博客的关键是看看批量插入是否有什么不同。为了简化测试,下面是我如何设置一个简单的环境。

由于此批量/批量插入是为PG14引入的,因此我们需要切换到稳定的PG14分支,即REL_14_stable。签出源代码后,只需运行以下命令:配置,制作和制作安装.以下是本博客中使用的命令。

./configure——prefix=$HOME/sandbox/postgres/pgapp——enable-tap-tests——enable-debug CFLAGS="-g3 -O0" make && make install cd contrib/postgres_fdw/ make && make install export PGDATA=$HOME/sandbox/postgres/ PGDATA initdb -D $PGDATA pg_ctl -D $PGDATA -l logfile start

为了测试外国数据包装器,我们需要启动另一个PG服务器。要简单,我只需在外部数据群集中启动PG服务器,并将默认端口更改为不同的数据服务器,例如,5433.下面是用于设置Foreign Server的命令。

export FPGDATA=$HOME/sandbox/postgres/pgdata2 initdb-D$FPGDATA

初始化外部数据集群后,需要将端口修改为5433,然后启动外部PG Server。

vim $FPGDATA/postgresql.conf pg_ctl -D $FPGDATA -l logfile-f start . vim $FPGDATA/postgresql.conf pg_ctl -D

3.外国表设置

现在,我们可以设置如下所示的基本外国数据包装器测试环境。

在本地PG服务器上:

3.1.使用默认批处理设置创建外部服务器
postgres =#创建服务器FS外国数据包装器Postgres_fdw选项(dbname'postgres',host'127.0.0.1',端口'5433');创建服务器
3.2.创建用户映射
postgres=#为david服务器fs选项创建用户映射(用户“david”);创建用户MAPPI
[...]
Onder Kalacı在城市数据2021-09-17在15:23

Citus 10.2出来了!如果你还不熟悉Citus,这是一个开源扩展至博士后这将Postgres转换为分布式数据库,因此您可以在任何规模上实现高性能。Citus开源软件包可用于下载.和citus也可用在云中作为托管服务。

您可以看到所有更改的项目符号列表更新日志在GitHub上。这篇文章是你对Citus 10.2的新功能的指导,包括一些标题功能。

如果您想赶上以前版本中的所有新事物,请查看我们之前的博客文章Citus 10.1Citus 10Citus 9.5,Citus 9.4

Citus 10.2英雄图形"height=
Citus 10.2发布时,飞行员座位上有一头大象,当然还有我们的开源吉祥物Citus Elicorn的贴纸。

PostgreSQL 14 Beta3支持和准备PostgreSQL 14

由于Citus是Postgres的扩展,因此我们更容易将Citus与最新版本的Postgres保持同步(如果Citus是fork,则不会如此)。这意味着当发布新的Postgres版本时,我们可以快速发布支持所有或大部分新功能的Citus新版本。

值得兴奋的事情之一是:Citus 10.2与Postgres 14beta3释放已经支持

[...]
作为顾问,我必须每天分析各种数据库。我需要能够掌握主要问题很快,找到解决它们的最佳方法。分析日志是一种非常有效的方法来寻找问题。我对现有工具感到沮丧,因为我无法深入潜入问题,以找到与该问题相关的更准确的数据。这就是我决定使用SQL来分析客户的日志文件的地方。
MichałMackiewicz于2021-09-16 09:15

将一个人的操作系统升级到新的主要版本是一个重要的系统维护任务,通常是一件好事。它带来了新的功能,安全改进,访问更新包等。有时它不会顺利进行,例如更新的系统将拒绝开始。但是升级运行Postgres集群并涉及a的操作系统格利伯库版本更新,或将数据库迁移到运行另一个OS(和glibc)版本的另一台机器上,会带来鲜为人知但非常重大的风险……

这种疾病

问题背后的技术原因非常详细说明这篇文章Citus。长话短说,glibc代码中的更改会使操作系统文本排序顺序与以前的版本不一致,进而与已经创建的B-Tree索引不一致。可能的损害仅限于文本数据(VARCHAR、TEXT)、数字(整数、浮点数、NUMERICs…)上的索引,当然布尔值是不受影响的。

症状和诊断

索引腐败会导致各种各样的不好的事情,所有这些都可以被描述为“怪异的行为”或“Postgres不去做这样的事情!”例子包括:

  • 在受影响的表上写入事务(INSERT、UPDATE或ALTER),导致意外崩溃或重新启动,服务器日志中显示“segmentation fault”消息,
  • 写入事务失败,原因是“错误:无法在偏移处拆分包含X项的过帐列表元组”
  • 由于“std :: __ ios faility”的pgagent工作失败了():basic_filebuf :: _ m_convert_to_external转换错误:iostream错误
  • 尽管有独特的约束,请重复键值
  • SELECT查询不返回表中确实存在的行,并执行WHERE子句

如果这些情况发生在您身上,您最近升级了操作系统,切换到运行较新操作系统版本的复制副本,或者使用流式复制将数据库迁移到另一台运行较新操作系统版本的计算机上,您可能是索引损坏的受害者。

治疗

首先,检查系统日志

[...]
发布的Pavlo GolubCybertec2021-09-16 08:00

您好,我的名字是Pavlo Golub,我是一个调度器瘾君子。在我实施的时候开始了pg_timetablePostgreSQL。我写了很多东西关于它。在这篇文章中,我想分享我对PostgreSQL可用调度器的调查结果。我在北京大学做了一个关于这个话题的报告欧洲核子研究中心聚会,所以你可能想要检查一下为更多的细节。

PostgreSQL调度程序比较表

让我们从完整的比较表开始。如果您想了解每个方面的更多信息,您将在下面找到进一步的解释。

我希望得到关于这个表的评论和建议,特别是来自这些产品的开发人员或用户。我可能会对自己的作品有偏见,所以请不要太苛刻地评判我。

特性\产品 pg_timetable pg_cron pgAgent jpgAgent PGBucket.
建筑学
2019年 2016年 2008年 2016年 2015年
实施 独立的 bgworker 独立的 独立的 独立的
C c++ JAVA c++
可以在没有扩展的情况下操作 ✔"class= ❌"class= ❌"class= ❌"class= ✔"class=
作业元存储在 数据库 数据库 数据库 数据库 文件
远程数据库执行 ✔"class= ❌"class= ✔"class=
[...]
在即将发布的PostgreSQL-14中,我们将看到多种增强功能逻辑复制我希望这将进一步增加它的使用。本博客主要总结并简要解释逻辑复制中的所有增强功能。

大交易的解码:

允许将大型正在进行的事务流式传输到订阅服务器。在PostgreSQL-14之前,事务仅在提交时进行流式处理,这导致大型事务的应用延迟较大。使用此功能,我们将看到应用滞后被减少,并且在某些情况下,这将导致一个巨大的性能胜利。我在上一篇文章中详细解释了这个特性博客

逻辑解码性能:

减少CPU占用,提高具有大量ddl的事务的解码性能。据观察,解码包含截断一个包含1000个分区的表的事务将在1秒内完成,而在此之前,它通常需要4-5分钟。在解释我们是如何获得这种性能提升之前,让我简要地告诉PostgreSQL中的无效消息是什么,因为这对理解这种优化很重要。这些消息用于刷新每个后端会话中的不可见系统缓存项。我们通常在后台的命令端执行这些命令,生成并发送它们在交易结束时通过共享队列到其他后端进行处理。这些通常是为对系统目录进行插入/删除/更新操作而生成的,而这些操作是为DDL操作而发生的。

在解码时,我们使用在每个命令结束时执行整个事务的所有失效,因为我们无法知道在该命令之前发生了哪些失效。因此,涉及大量DDL的事务会占用更多的时间,并导致CPU使用率高。但现在我们知道了每个命令端的特定失效,所以我们只执行所需的失效。这项工作是由commit完成的d7eb52d718

初始表同步:

初始表是sy
[...]

介绍

在以前的文章中([1][2][3]),我已经解释了我们作为PostgreSQL的一个新特性提出的增量视图维护(IVM)。正如我在书中解释的那样[1],我们的IVM实现支持元组重复项,即它允许查看要包含重复的元组。本文介绍了我们如何处理IVM实现中的元组副本。

TO10PLE复制在增量视图维护中

在一个[3]介绍了增量视图维护(IVM)的基本理论。现在,我将简要回顾一下。

假设表R被更新,并且这些更改被存储到两个增量表:∇R和ΔR。∇R是从R中删除的元组集合,ΔR是插入R中的元组集合。使用它们,我们可以计算视图的delta表:∇V和ΔV,它们包含将在视图上发生的更改。

最后,我们可以通过将delta表∇V和ΔV应用到视图V来增量更新视图。具体来说,∇V中的元组从V中删除,然后将ΔV中的元组插入到V中。

请注意,表和视图可能包含重复的元组。因为SQL是基于- 过分,不是语义。例如,假设视图V包含两个元组A和三个元组B,表示为V = {A (2), B(3)},这意味着元组A的多重性为2,元组B的多重性为3。然后,假设您想删除一个元组A和两个元组B,即ΔV = {A (1), B(2)},我们想执行操作V←V∸ΔV。(这里,∸是一个名为“蒙斯”。)

如何删除指定数量的元组?

现在,我们如何在PostgreSQL中获得此操作的结果?

如果你只是用删去如下所示,您将无法删除指定数量的元组,因为将删除所有行。

删去从…起V在哪里x在里面选择x从…起ΔV

获得所需结果的一种方法是使用除了所有如下:

选择从…起V除了所有选择从…起ΔV

然而,虽然这会给出删除的结果,但它确实会

[...]

在我最近发表的关于时间加权平均数在书中,我描述了我作为一名电化学家的早期职业生涯是如何让我认识到时间加权平均的重要性的,它塑造了我们如何将它们构建成时间尺度b的超功能。几年前,在我开始学习更多关于PostgreSQL内部的内容后不久(请查看我的聚合和两步聚合发帖让你自己了解他们!),我在一家广告分析公司的后端工作,在那里我开始使用TimescaleDB。

与大多数公司一样,我们关心了很多关于确保我们的网站和API呼叫在用户的合理时间内返回结果;我们的分析数据库中有数十亿行,但我们仍然希望确保网站响应和有用。

网站的性能和商业结果之间有直接的联系:如果用户需要等待太长时间才能得到结果,他们就会感到厌烦,从商业和客户忠诚度的角度来看,这显然是不理想的。为了了解我们的网站如何运行并找到改进的方法,我们跟踪了API调用的时间,并将API调用响应时间作为一个关键指标。

监控API是一种常见的场景,通常属于应用程序性能监控(APM)的范畴,但在其他领域也有很多类似的场景,包括:

  1. 工业机械的预测性维修
  2. 舰队监控运输公司
  3. 能源和水使用监测和异常检测

当然,分析原始(通常是时间序列)数据只能到此为止。您希望分析趋势,了解系统相对于您和用户的期望的执行情况,并在问题影响生产用户之前捕获和修复问题,等等。我们构建时间尺寸的超功能,以帮助解决此问题,并简化开发人员如何使用时间序列数据

作为参考,超函数是一系列SQL函数,它们使得在PostgreSQL中更容易操作和分析时间序列数据,而代码行更少。你可以使用hyperfunct

[...]

尊重大多数人,质疑少数人的现状

昨天,PostgreS金博宝188充值QL核心团队发动了前所未有的攻击关于FundaciónPostgresql整体而单独对抗Alvaro Hernandez。FundaciónPostgreSQL.及时回应

这是对Postgres社区非营利组织和社区成员个人层面的攻击。这是前所未有的,因为以前从未发生过类似的袭击。但更令人担忧的是,这是不必要和不成比例的:

  • 不必要译文:Core公司此前决定,他们不想进行任何对话,并将在法庭上证实他们的主张。这些过程正在等待解决。如果Core认为法庭是解决问题的方法,为什么要在诉讼程序结束之前采取行动?Fundacion PostgreSQL已经总是提供与核心团队进行对话和谈判的意愿,核心团队绝不想和我们建立任何对话,不管有没有律师。
    作为Postgres社区的管家,核心应该尽量以友好的方式解决争议(尽管他们的索赔,但私下而言,尽管他们从未尝试过)。尝试一切可能的措施,而不会对社区及其成员造成伤害。核心的代理方式削弱了社区,而不是必要的。它创造了不必要的鸿沟,只能偏离和攻击部分。冲突和争议可能出现在社区中;但是管家必须在处理它们的处理方式方面锻炼,并应尽最大努力解决纠纷,而不会产生愤慨并破坏社区的一些成员。核心从未试图解决这一纠纷,只能强制它。

  • 不成比例当前位置没有紧迫性,也没有对博士后社区造成伤害。即使核心团队对商标的主张和辩护可能是合法的,Fundación PostgreSQL也非常清楚地表明注册商标仅用于以下用途:

[...]

多年来,我们的许多PostgreSQL客户都询问它是否在 - 或之后创建索引是有意义的 -导入数据.在批量加载数据时禁用索引是否有意义,还是启用索引更好?对于参与数据仓库和大规模数据摄入的人来说,这是一个重要的问题。所以让我们深入研究一下:

PostgreSQL中的B树索引

在我们深入研究性能差异之前,我们需要看看PostgreSQL中的b -树实际上是如何构造的:

在批量加载后创建索引"class=

索引指向堆(= " table ")中的页。在PostgreSQL中,B-tree索引总是至少包含与底层表一样多的数据。向表中插入内容还意味着必须将数据添加到b -树结构中,这很容易将单个更改变成更昂贵的过程。请记住,这对每一行都会发生(除非您使用的是部分索引)。

实际上,额外的数据可能会堆积起来,导致非常昂贵的操作。

一些基本性能数据

为了显示导入后和导入前的索引之间的区别,我在旧Mac OS X机器上创建了一个简单的测试。然而,在几乎所有其他操作系统上,包括Linux,都可以看到类似的结果。

以下是一些结果:

test=#创建表t#u test(id int,x numeric);CREATE TABLE test=#插入到t_test SELECT*,random()中,从generate_series(1100000)生成;插入10000000次:50249.299毫秒(00:50.249)测试=#在t#u测试(x)上创建索引idx_test_x;创建索引时间:68710.372毫秒(01:08.710)

如您所见,加载数据大约需要2分50秒,创建索引需要略多于1分钟。

但是,如果我们在加载数据之前删除表并创建索引,会发生什么呢?

test = ##创建表T_Test(ID int,x数字);创建表test =#在t_test(x)上创建index idx_test_x;创建索引时间:11.192 ms test =#插入到to_test select *,wandul()from generate_series(1,100
[...]
发布的Andreas'广告'Scherbaum2021-09-13 14:00
Soumyadeep Chakraborty:我的家乡是印度加尔各答,我一生的大部分时间都在那里度过,包括在科技行业工作的3年。最近我住在美国:我在纽约长岛住了一年半。在过去的两年里,我一直住在加州的圣何塞,在VMware工作。

博士后核心团队对博士后社区发起前所未有的攻击

分布是项目恢复力的关键

PostgreSQL项目的经常有优点之一是其金博宝188充值弹性.特别是在罗伊演员的存在:作为分布式社区,很难针对任何个人,群体或实体并影响/扰乱整个社区。同样,不可能“购买PostgreSQL”,无论您有多少钱,因为没有一个实体,组织或公司构成整个项目,因此可以获得。PostgreSQL是一个分布式社区,这是它的核心优势之一

但实际上:谁是PostgreSQL社区?金博宝审核不让提款金博宝188充值谁开发PostgreSQL?这 ”PostgreSQL全球发展组(PGDG),这是一个抽象的术语世界各地为PostgreSQL做出贡献的开发者和志愿者. 跳入水中版权,我们看到1996 - 2019年期间有效地分配给PGDG。的PostgreSQL开发人员常见问题解答进一步澄清“贡献者保留他们的版权[…]。他们只是认为自己是可持续发展目标的一部分”。版权也被分发这加强了之前关于PostgreSQL弹性的推理。

项目的知识产权(IP)保护还需要足够的商标保护。截至目前,有三个PostgreSQL社区非营利组织(NPO),该组织持有PostgreSQL项目的商标注册。金博宝188充值其中三个已经使他们公开,开放和免费为任何人用于PostgreSQL的利益:该加拿大PostgreSQL协会(PAC),PostgreSQL欧洲(一些),FundaciónPostgreSQL.(FPG),尽管其中一些最近引入了一些使用限制,我们将在后面看到。

这些商标有几种与Postgres产品和Postgres公司名称有关的其他差异,这些商标由各自(营利性)公司注册。

PostgreSQL商标保护历史

T

[...]
发布的Regina Obe.PostGIS2021-09-11 00:00

PostGIS团队很高兴发布即将发布的PostGIS 3.2.0版本的第一个alpha。

最好的搭配PostgreSQL 14 Beta3.. 此版本的PostGIS使用PostgreSQL 14中引入的更快的GiST构建支持API。如果在开发中使用GEOS 3.10开发您可以利用ST_MakeValid的改进。此版本还包括许多附加功能和改进postgis_rasterpostgis_topology.扩展。

通过单击标题超链接继续阅读。。
发布的布莱恩·戴维斯2021-09-10 20:00

以下是Postgres主要版本发布的日期,并且在RDS和Aurora上首次获得。

在你的办公室AWS Managed Postgres主要版本发布日期投注池中获得优势是有用的。

释放作为选择从…起价值观“13”'2020-09-24'::日期“2021-02-24”::日期'2021-08-26'::日期),“12”“2019-10-03”::日期“2020-03-31”::日期'2021-01-28'::日期),“11”'2018-10-18'::日期“2019-03-13”::日期'2019-11-26'::日期),“十”'2017-10-05'::日期“2018-02-27”::日期'2018-09-25'::日期),“9.6”“2016-09-29”::日期'2016-11-11'::日期“2017-10-24”::日期作为t版本pgrds极光选择版本pg作为“博士后释放”rds作为“RDS释放”极光作为“极光释放”rds-pg作为“pg  - > rds lag”极光-pg作为“pg  - >极光滞后”极光-rds作为“RDS  - > Aurora LAG”从…起释放订单通过版本::小数
版本|博士后释放|rds.释放|极光释放|PG.->rds.缓慢移动|PG.->极光缓慢移动|rds.->极光缓慢移动---------+------------------+-------------+----------------+---------------+------------------+-------------------9.6|2016年-09-29|2016年-11-11|2017年-10-24|43|390|34710|2017年-10-05|2018年-02-27|2018年-09-25|145|355|210.11|2018年-10-18|2019年-03-13|2019年-11-26|146|404|258.12|2019年-10-03|2020.-03-31|2021.-01-28|180|483.|30313|2020.-09-24|2021.-02-24|2021.-08-26|153|336|1835

博士后发布日期//www.hxdtz.com/support/versioning/

在RDS 13https://aws.amazon.com/about-aws/whats-new/2021/02/amazon-rds-now-supports-postgreesql-13/

13在奥罗拉https://aws.amazon.com/about-aws/whats-new/2021/08/amazon-aurora-postgresql-13/

12在RDS上https://aws.amazon.co

[...]

几乎每一个Postgres的新用户都会发现,将列指定为瓦查尔(n)与使用无限大相比文本.不仅是文本类型是作为方便而提供的(它不在SQL标准中),但可以将其与约束字符类型进行比较,如字符varchar没有性能惩罚。从Postgres字符类型上的文档(注意,性格不同是一样的吗varchar):

这三种类型之间没有性能差异,除了使用空白填充类型时的存储空间,以及几个额外的CPU周期,可以在存储到长度约束列时检查长度。尽管字符(n)在其他一些数据库系统中具有性能优势,PostgreSQL没有这样的优势;实际上字符(n)通常是三者的最慢,因为它的额外存储成本。在大多数情况下文本性格不同应该改用。

对于我们许多人来说,这是一个巨大的负担,因为我们习惯于在其他系统中微观管理长度限制。在大型MySQL和Oracle系统中工作过之后,我习惯于不仅计算要添加哪些列,还要计算需要多长时间——这是否应该是一个问题瓦查尔(50)varchar (100)500.?(或以上都不是?)与Postgres,你只是停止令人担忧和拍打文本关于一切。它释放。

从那以后我的立场有所改变,为了解释为什么,我要带你回到大约2018年的Stripe。

有一天,我们突然意识到,我们没有检查Stripe API中文本字段的长度限制。这不仅仅是因为有几个字段没有检查,而是因为实际上没有检查。虽然API框架允许最大长度,但从来没有人想过给它分配一个合理的默认值rse绝大多数参数(到目前为止有数千个)都没有设置一个。只要发送者没有突破周围的任何限制

[...]
2021年9月10日,Noah Misch提交了一个补丁:撤销PUBLIC schema中的PUBLIC CREATE,该schema现在属于pg_database_owner。这会将默认ACL切换为自CVE-2018-1058以来文档推荐的ACL。188金宝慱网站地址升级将继承任何旧的所有权和ACL。拒绝2018年推荐的网站应该重新审视一下。食谱……继续阅读"Waiting for PostgreSQL 15 - Revoke PUBLIC CREATE from PUBLIC schema, now owned by pg_database_owner."
发布的卢卡·法拉利2021-09-10 00:00

pgbackrest支持JSON输出格式,这对于自动化一些信息分析非常有用。

使用金桥从中获取信息PGBackrest.

PGBackrest.提供JSON格式的命令输出。我不是JSON的忠实粉丝,但它具有这样的输出提供了一些优势,最明显的是它是一种稳定的文本输出格式可以很容易地用其他工具检查。
换句话说,不需要正则表达式来解析文本输出,而且输出保证是稳定的,这意味着不会发生任何更改(或者更好的是不会删除任何字段),而文本输出中的一个简单的重新措辞可能会让您巧妙的正则表达式崩溃!

在可用的工具中,金桥是一个允许您的好毛骨计划解析和导航一个JSON内容。
让我们看看如何得到一些输出组合金桥PGBackrest.

得到最后一次备份信息

当您的节有很多备份时,您可能不想深入地监视所有这些备份,而是希望得到关于上次备份发生时间的快速提示。
pgbackrest信息命令报告给定节的所有可用备份,然后可以通过管道将其传输到金桥以获得更多人类可读的信息。
快!给我看片段:



pgbackrest信息——输出json |金桥'"Stanza: " + .[].name + " (" + .[].status。消息+”)" + "上次备份完成时间" + (.[].backup[-1].timestamp. "停止| strftime("%Y-%m-%d %H:% m "))'"Stanza: miguel (ok) Last backup completed at 2021-07-27 09:23"



这是我在匆忙中需要查看哪台机器在备份方面遇到问题时希望看到的:它向我显示节的名称、备份的状态(好吧)备份结束的时间和日期。
让我们更详细地分析该命令:

  • pginfo——输出json的输出信息命令作为JSON;
  • 金桥用于解析JSON输出连接字符串,以+
    • 。[]。姓名公关
[...]
由Miranda Auhl在时间尺度2021-09-09 15:32

时间序列数据时间序列数据集中表示系统、流程或行为随时间的变化。了解这些变化有助于我们解决众多行业的复杂问题,包括可观测性金融服务物联网,甚至职业足球

根据他们正在构建的应用程序的类型,开发人员最终会收集数百万行时间序列数据(有时每天甚至每小时收集数百万行数据!)。要理解这些高容量、高保真的数据,需要一套特殊的数据分析技能,而这些技能通常不是经典开发人员技能的一部分。要执行超越基本问题的时间序列分析,开发人员和数据分析师需要专门的工具,以及时间序列数据日益突出,效率这些工具中的任何一个都变得更加重要。

通常,数据分析师的工作可以归结为评估清洁转换,建模数据。根据我的经验,我发现这些行动对于我从数据中获得理解是必要的,我将在这篇文章中将其称为“数据分析生命周期”。

图表显示“数据分析生命周期”,评估->清洁->转换->模型"class=
数据分析生命周期

Excel、R和Python可以说是一些最常用的数据分析工具,尽管它们都是很棒的工具,但它们可能并不适合所有工作。从经验上讲,这些工具在生命周期的早期阶段对于“数据搜索”来说效率尤其低下;具体来说评估数据清理数据,转换数据建模前工作涉及的步骤。

由于我处理过更大、更复杂的数据集,我开始相信为特定类型的数据(如时间序列数据)构建的数据库对数据分析更有效。

为背景,TimescaleDB是一个关系的时间序列数据数据库。如果您的分析是基于时间序列数据集,那么TimescaleDB可能是一个很好的选择

[...]

经过几个月的研究和实验,运行了严重依赖db的Go应用程序,我们得出结论SQLC.当涉及到在Go代码中使用Postgres(可能还有其他数据库)时,这是一个比喻性的正确答案。让我告诉你我们是怎么做到的。

首先,让我们来看看围棋生态系统中流行的选项:

  • 数据库/ sql: Go的内置数据库包。大多数人都同意——最好避免。它是与数据库无关的,这很好,但通过扩展,这意味着它符合最小公分母。不支持postgresql特有的特性。

  • lib/pq:在围棋生态系统中的早期博士后领跑者。它在时间和地点上都很好,但已经落后,不再积极维护。

  • pgx:一个写得非常好、非常全面的软件包,用于与Postgres的全功能、高性能连接。然而,它坚持不提供任何类似ORM的特性,并且除了一个基本的查询接口之外,它对您的帮助很少。喜欢数据库/ sql,将数据库结果水合到结构中是一件痛苦的事情——不仅要在一个数据库中列出令人厌恶的目标字段选择声明,但你也必须扫描他们手动进入结构。

    • 稀少的:通过消除扫描到结构的每个领域,SCANS在PGX之上增加了一些生活质量改进。但是,仍必须列出所需的字段名称选择……声明,因此它只将样板减少了一半。
  • go-pg:我以前在项目中使用过这个,它是一个非常好的postgresql专用的小ORM。下面再详细说明一下为什么Go中的orm不是特别令人满意,但是Go -pg的另一个缺点是它实现了自己的驱动程序,并且与pgx不兼容。

    • 小面包: go-pg也被置于维护模式,以支持Bun,这是go-pg的一个重写,可以使用非postgres数据库。
[...]

指数在糟糕的情况下膨胀"src=
©劳伦斯阿尔贝2021

PostgreSQL v12带来了更高效的索引存储,v13通过添加重复数据消除索引条目。但是彼得·盖根还没有完成!PostgreSQL v14将会带来“自下而上”索引项删除,旨在减少不必要的页面拆分、索引膨胀和大量更新索引的碎片。

为什么我们会有指数膨胀?

在B-tree索引中,对于表中的每个行版本(“tuple”)都有一个索引项,这个索引项不是死的(对每个人都不可见)。当真空删除死元组时,还必须删除相应的索引项。就像使用表一样,这会在索引页中创建空白空间。这样的空间可以重用,但如果没有新条目添加到页面,那么空间将保持为空。

这种“膨胀”在某种程度上是不可避免和正常的,但如果膨胀太大,指数的效率就会降低:

  • 对于索引范围扫描,必须扫描更多的页面
  • 缓存在RAM中的索引页意味着缓存膨胀,这是对RAM的浪费
  • 每页更少的索引条目意味着更少的“扇出”,因此索引可能有更多的级别

如果频繁更新同一行,这种情况尤其可能发生。直到真空可以清理旧的元组,表和索引将包含同一行的多个版本。如果索引页被填满了,这尤其令人不快:PostgreSQL将把索引页“分割”为两部分。这是昂贵的手术,而且之后真空清理完毕后,我们将看到两个臃肿的页面,而不是一个页面。

改进索引膨胀和性能的当前特性

热元素

HOT元组的创建可能是PostgreSQL应对索引中不必要变动的最强武器。有了这个特性,an使现代化创建元组,这些元组不能从索引引用,而只能从表行的前一个版本引用。这样,根本就不需要写新的索引项,这对性能很好,并且完全避免了索引

[...]
发布的瑞恩•兰伯特2021-09-07在03:15

如果您同时使用Postgres和Python,您几乎肯定熟悉psycopg2。Daniele Varrazzo多年来一直是psycopg项目的维护者。2020年,丹尼尔开始全职致力于创建psycopg3,这是psycopg2的继任者。最近,psycopg3的Beta 1版本是由可通过PyPI安装.这篇文章强调了psycopg3的两个好消息:

  • 移民是很容易的
  • 连接池岩石

正如第一部分所示,从psycopg2迁移到psycopg3非常容易。这篇文章的大部分内容都是研究pyscopg3的连接池,以及这个特性对应用程序性能的影响。

迁移

易于迁移是鼓励开发人员升级的一个重要特性。当一个“简单的升级”变成一串接一串的错误时,整个应用程序都会感到沮丧。幸运的是,psycopg3做对了这一部分!在过去的一周中,我完全迁移了两个项目到psycopg3,并开始迁移另外两个项目。到目前为止,摩擦已经非常低,并仅限于边缘情况下的使用。

下面的示例显示了我的项目如何使用的简化示例psycopg2.