
2022 年 10 月 13 日- PostgreSQL 全球开发组今天宣布发布 PostgreSQL 15,这是世界上最先进的开源数据库的最新版本。
PostgreSQL 15 建立在最近版本的性能改进的基础上,在管理本地和分布式部署中的工作负载方面取得了显着收益,包括改进的排序。此版本通过添加流行的 MERGE 命令改善了开发人员的体验,并添加了更多用于观察数据库状态的功能。
PostgreSQL 核心团队成员 Jonathan Katz 表示:“PostgreSQL 开发人员社区继续构建功能,以简化运行高性能数据工作负载,同时改善开发人员体验。” “PostgreSQL 15 强调了如何通过开放式软件开发,为我们的用户提供一个非常适合应用程序开发并对关键数据更安全的数据库。”
PostgreSQL是一个以可靠性和稳健性著称的创新数据管理系统,受益于全球开发者社区超过 25 年的开源开发, 并已成为各种规模组织的首选开源关系数据库。
改进的排序性能和压缩
在这个最新版本中,PostgreSQL 改进了其内存中和磁盘上的 排序 算法,根据排序的数据类型基准显示,加速了 25% - 400%。在 PostgreSQL 15 中,使用row_number()、rank()、dense_rank() 和 count() 作为 窗口函数 也具有性能优势。使用 SELECT DISTINCT 的查询现在可以 并行执行。
基于以前 PostgreSQL 版本的工作,允许异步远程查询,PostgreSQL 外部数据包装器 postgres_fdw 现在支持 异步提交。
PostgreSQL 15 中的性能改进扩展到归档和备份。PostgreSQL 15添加了使用 LZ4 和 Zstandard (zstd) 压缩预写日志 (WAL) 文件的支持,这对于某些工作负载可以同时具有空间和性能优势。在某些操作系统上,PostgreSQL 15 增加了对 WAL 中引用的预取页面的支持, 以帮助加快恢复时间。PostgreSQL 的内置备份命令 pg_basebackup现在支持备份文件的服务器端压缩,可选择 gzip、LZ4 和 zstd。PostgreSQL 15 包括使用自定义模块进行归档的能力,这消除了使用 shell 命令的开销。
富有表现力的开发人员功能
PostgreSQL 15 包含 SQL 标准 MERGE 命令。MERGE允许您编写条件 SQL 语句,这些语句可以在单个语句中包含INSERT、 UPDATE和DELETE操作。
此最新版本添加了使用正则表达式检查字符串的新函数:regexp_count()、regexp_instr()、regexp_like()和 regexp_substr()。PostgreSQL 15 还使用扩展功能range_agg 聚合 multirange数据类型,这是在前一个版本中引入的 。
PostgreSQL 15 允许用户使用调用者而不是视图创建者的权限来创建查询数据的视图。这个名为security_invoker的选项添加了额外的保护层,以确保视图调用者具有使用基础数据的正确权限。
更多逻辑复制选项
PostgreSQL 15 为管理逻辑复制提供了更大的灵活性。此版本为发布者引入了行过滤 和 列列表,允许用户选择复制表中的数据子集。PostgreSQL 15 添加了简化 冲突管理的功能,包括跳过重播冲突事务以及在检测到错误时自动禁用订阅的能力。此版本还支持将两阶段提交 (2PC) 与逻辑复制结合使用。
日志记录和配置增强
PostgreSQL 15 引入了一种新的日志记录格式:jsonlog。这种新格式使用定义的 JSON 结构输出日志数据,允许在结构化日志系统中处理 PostgreSQL 日志。
此版本使数据库管理员在用户如何管理 PostgreSQL 配置方面具有更大的灵活性,增加了授予用户更改服务器级配置参数权限的能力。此外,用户现在可以在psql中使用元命令\dconfig 搜索有关配置的信息。
其他显著变化
PostgreSQL 服务器级别的统计信息 现在收集在共享内存中,消除了统计信息收集进程和定期将此数据写入磁盘。
PostgreSQL 15 使 ICU 排序规则成为集群或单个数据库的默认排序规则成为可能。
此版本还添加了一个新的内置扩展walinspec,让用户可以直接从 SQL 界面检查预写日志文件的内容。
PostgreSQL 15 还从public(或默认)模式中撤销除数据库所有者之外的所有用户的CREATE 权限。
PostgreSQL 15 从 PL/Python 中删除了长期弃用的“独占备份”模式和对 Python 2 的支持。
https://www.postgresql.org/about/news/postgresql-15-released-2526/
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain