中国 PG 分会培训认证执行总监、资深数据库工程师,十多年的数据库运维管理及培训经验,掌握 PostgreSQL 架构部署、性能优化等,致力于推动 PostgreSQL 在中国的发展。作者:沙扬・慕克吉(Shayon Mukherjee)我是一名具有产品和基础设施工程经验的软件工程师。我喜欢构建和扩展以软件为主导的基础设施。我感兴趣的一些领域(没有特定的顺序或类别):分布式系统、站点可靠性、事件管理、运行、Gulab Jamun 和 Biryani。虽然我喜欢作为产品和基础架构工程师使用 MySQL(第一个数据库),但最近,我也开始欣赏 PostgreSQL。最近阅读了这篇关于为什么基础架构工程师喜欢 MySQL 的文章,我认为它是有参考性的。本文不是 MySQL vs PostgreSQL 的帖子。这只是我作为基础架构工程师对 PostgreSQL 的欣赏的一个小总结。往池塘里扔一块石头,你就会让基础设施工程师讲述结构更改如何导致生产中断的故事。对于大多数操作,我发现 PostgreSQL 具有更安全的开箱即用替代方案,因此允许您通过获取最少的锁来执行零停机时间或接近零停机时间的结构更改。此外,在每个主要版本中,都有一个引入优化的主题,重点是在引擎中为常见任务获取更少的锁。PostgreSQL 能够在不获取任何锁的情况下添加和删除索引。它使用一个名为 CONCURRENTLY 的参数来执行此操作。CREATE INDEX CONCURRENTLY sales_quantity_index ON sales_table (quantity);
DROP INDEX CONCURRENTLY sales_quantity_index ON sales_table;
在添加外键时通过 NOT VALID 传递给语句,可以使得 PostgreSQL 跳过验证约束,因此不需要获取会阻塞写入的锁(source)。当然这也是一个选择,所以你的操作可能会有所不同(使其生效需要再执行一条语句)。ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses (address) NOT VALID;
ALTER TABLE distributors VALIDATE CONSTRAINT distfk;
执行以下操作会使 PostgreSQL 扫描整个表以确保约束有效。ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL;
根据工作负载的性质,这可能非常具有侵入性。相反,您可以将其分解为更多语句,首先添加一个约束但不立即验证。ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (column IS NOT NULL) NOT VALID;
请注意,我们在这里利用 NOT VALID 选项。接下来,您可以手动执行命令,告诉 PostgreSQL 验证约束。ALTER TABLE table_name VALIDATE CONSTRAINT constraint_name;
这使得 PostgreSQL 不会获得 ACCESS EXCLUSIVE LOCK,而是 SHARE UPDATE EXCLUSIVE,这意味着您的读 / 写不受影响。接下来,添加非空约束:ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL;
因为这个约束已经验证过了,所以 PostgreSQL 这次不会获得 ACCESS EXCLUSIVE LOCK。现在,您可以执行以下命令删除 CHECK 约束:ALTER TABLE table_name DROP CONSTRAINT constraint_name;
虽然它增加了要执行的步骤数量,但它也使整个过程更加可靠。我认为这是产品和基础架构工程师都欣赏的东西,包括从自定义数据类型到用户定义的函数。能够在 SQL 甚至 C 中编写自定义函数是非常强大的,通常可应用在自动化操作任务时(我经常选择使用 SQL)。这是在模块化函数中抽象逻辑的绝佳方式,因为它是 SQL,所以你可以 “让数据库做困难的工作”。到目前为止,我很喜欢利用 PostgreSQL 的这些开箱即用的特性来执行关键操作。从现在开始,期待着发现 PostgreSQL 数据库更多令人欢喜的功能。https://www.shayon.dev/post/2022/17/why-i-enjoy-postgresql-infrastructure-engineers-perspective/![](https://oscimg.oschina.net/oscnet/1f0d755b-5173-492d-af19-344c05e4a83b.png)
![](https://oscimg.oschina.net/oscnet/5beb6c56-c25d-4c09-ae79-e9953f23d701.png)
![](https://oscimg.oschina.net/oscnet/252aa105-0e57-4dd2-b35e-4dba454674ef.png)
![](https://oscimg.oschina.net/oscnet/d12bc991-2a4f-4319-9492-0a579e4c2163.png)
中国 PostgreSQL 分会与腾讯云战略合作协议签订
PostgreSQL 14.0 正式发布
深度报告:开源协议那些事儿
从 “非主流” 到 “潮流”,开源早已值得拥有
Oracle 中国正在进行新一轮裁员,传 N+6 补偿
PostgreSQL 与 MySQL 版权比较
新闻 | Babelfish 使 PostgreSQL 直接兼容 SQL Server 应用程序
四年三冠,PostgreSQL 再度荣获 “年度数据库”
中国 PostgreSQL 分会入选工信部重点领域人才能力评价机构
![](https://oscimg.oschina.net/oscnet/11b69dd6-f0ec-43fb-be23-fb8ec717a65a.png)
更多新闻资讯,行业动态,技术热点,请关注中国 PostgreSQL 分会官方网站
https://www.postgresqlchina.com
中国 PostgreSQL 分会生态产品
https://www.pgfans.cn
中国 PostgreSQL 分会资源下载站
https://www.postgreshub.cn
![](https://oscimg.oschina.net/oscnet/8c881189-a8bf-4f32-9881-b700a4df2c74.png)