PostgreSQL 每周新闻 2020-8-12

PostgreSQL每周新闻#368 - 2020年8月12日

_config.yml 备注:英文原文地址 img

Postgres分页方法

大多数webapp用户不希望一次看到一个包含数千个项目的列表,因此页码通常被作为一种在易于管理的一组大的查询结果的方法。使用Postgres有几种方法可以实现这一点,但需要进行各种权衡。

Bruce Momjian

使用pg_stat_statements排查故障

这里介绍了Kaarel使用pg_stat_statements的排除PostgreSQL故障的故事。

Kaarel Moppel

[白皮书]AlwaysOn Postgres

了解如何在PostgreSQL中使用第二象限的BDR技术实现AlwaysOn可用性。AlwaysOn为运行关键业务应用程序的全球PostgreSQL数据库集群提供高达6个9的可用性。

2ndQuadrant PostgreSQL Products

使用自然完全联接比较SQL中的两个表

“自然联接是使用两个表的所有共享列名进行联接的语法糖,完全联接可确保我们也能检索到与联接谓词不匹配的列。”

Lukas Eder

Postgres13引入打印错误堆栈的功能

postgres13引入了一个简单但有用的功能,在报告错误时将堆栈跟踪记录到服务器日志中。

Amit Khandekar

Postgres高可用性:考虑因素和候选因素

这是系列文章中的第一篇,该文章探讨了将高可用性引入Postgres的各种方法。在这里提到了RepMgr、prosoni、PAF和PgPool II。

Hamid Akhtar

关于postgres13中的分区改进

Ahsan Hadi

避免brin索引的陷阱

John Porvaznik

面向R用户的Postgres速成课程

R是一种流行的统计计算环境和语言,因此您可能会发现从中使用Postgres是很有用的。

Pachá

在Postgres中使用JSONB对象数组

Rob Tomlin

超越jsonb?Postgres的通用非结构化数据类型

Álvaro想知道常规的JSON支持是否足够,Postgres中是否应该有超出它的东西-一种通用的非结构化数据类型,如果你愿意的话。

Álvaro Hernández

plpgsql_check现在支持跟踪

plpgsql_check是Pl/pgSQL代码的linter。

Pavel Stěhule

pgagroal 0.8.0:高性能Postgres连接池

0.8带来了故障转移和systemd支持。

Red Hat Inc.

💡本周提示

当您使用NOW()函数获取当前时间时,您将获得服务器时区中的当前日期和时间。

许多服务器都运行在UTC/GMT上,如果您也将UTC/GMT前后的时间使用规范化,那么一切都很好,但是一旦出现不匹配(无论是应用程序和数据库服务器之间,还是其他方面),事情就可能出问题,因此需要更具体一些。

NOW()返回带时区的时间戳(在Postgres或YugabyteDB中称为timestamp),但如果您有一个普通的timestamp[without time zone]列并将NOW()放入其中,则时区信息会自动删除:

=# create table test
      (a int primary key, b timestamp without time zone);
    
=# select now(), pg_typeof(now());
    
                now            |    	pg_typeof    	 
-------------------------------+--------------------------
 2020-05-06 16:44:03.917735-07 | timestamp with time zone
(1 row)


=# insert into test values
    (1, '2020-05-06 16:44:03.917735-07');
    
=# select * from test;
    
 a |         	b         	 
---+----------------------------
 1 | 2020-05-06 16:44:03.917735
(1 row)

=# show timezone;
  TimeZone
------------
US/Pacific

我们可以看到“b”列丢弃了时区。这意味着存储的结果是错误的,因为它不尊重用户将存储的纯时间戳值理解为UTC值的约定。

我们可以通过在时区“utc”使用now()来解决此问题,如下所示:

=# insert into test values
  (2, (now() at time zone 'utc'));
  
=# select * from test;
  
 a |         	b         	 
---+----------------------------
 1 | 2020-06-10 19:38:22.859175
(1 row)

🗓即将举办的Postgres活动

Written on August 12, 2020