标签: postgresql

如何在 PostgreSQL 的 Select 查询中使用默认值?

如果没有返回行,我想为应该使用的列使用默认值。这在 PostgreSQL 中可能吗?我该怎么做?或者我还有其他方法可以解决这个问题吗?

例如这样的事情:

SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3
Run Code Online (Sandbox Code Playgroud)

如果org_id = 3表中没有行,我想返回0

postgresql aggregate select default-value

43
推荐指数
3
解决办法
12万
查看次数

如何在 Postgresql 中有效地将数百万行从一个表复制到另一个表?

我有两个数据库表。其中一个包含数亿条记录。让我们称之为那个history。另一个是每天计算的,我想将其所有记录复制到history一个中。

我所做的是运行:

INSERT INTO history SELECT * FROM daily

它在一段时间内起到了作用,但随着记录数量的不断增加,它开始变得越来越慢。现在我有大约 200 万条记录需要在单个操作中从复制daily到复制,history并且需要很长时间才能完成。

是否有另一种更有效的方法将数据从一个表复制到另一个表?

postgresql

43
推荐指数
4
解决办法
8万
查看次数

强制 PostgreSQL 客户端使用 SSL?

我已经配置ssl = onpostgresql.conf(并且安装了证书等等)。这是否确保所有客户端始终通过 SSL 连接?

(也就是说,ssl = on如果没有SSL 加密就无法连接吗?)

是否有其他方法可以确保所有客户端始终通过 SSL/TLS 进行连接?

postgresql

42
推荐指数
2
解决办法
2万
查看次数

PostgreSQL:强制数据进入内存

有没有一种系统的方法可以强制 PostgreSQL 将特定表加载到内存中,或者至少从磁盘中读取它以便系统缓存它?

postgresql memory cache

41
推荐指数
3
解决办法
4万
查看次数

在 PostgreSQL 中实现 UPSERT 的惯用方式

我已经阅读了UPSERTPostgreSQL 中的不同实现,但所有这些解决方案都相对较旧或相对奇特(例如,使用可写 CTE)。

而且我根本不是 psql 专家,无法立即找出这些解决方案是否过时,因为它们被很好地推荐,或者它们(好吧,几乎所有这些都是)只是不适合生产使用的玩具示例。

在 PostgreSQL 中实现 UPSERT 的最线程安全的方法是什么?

postgresql plpgsql upsert

41
推荐指数
2
解决办法
5万
查看次数

如何对 PostgreSQL 查询进行基准测试?

我想对包含我为 PostgreSQL 编写的用户定义函数的查询进行基准测试。有没有标准的方法来运行这样的基准测试?

我知道可以\timing在 psql 提示符下打开计时,但理想情况下,我想要一个自动处理所有事情的脚本:运行查询几次,每次运行后清除 PostgreSQL 缓存(可能通过重新启动 PostgreSQL 的服务),并输出平均运行时间(使用的内存是一个加号)。

postgresql benchmark

41
推荐指数
1
解决办法
3万
查看次数

为什么 Postgres 会生成一个已经使用过的 PK 值?

我正在使用 Django,但每隔一段时间我就会收到此错误:

IntegrityError:重复键值违反唯一约束“myapp_mymodel_pkey”
详细信息:键(id)=(1)已经存在。

我的 Postgres 数据库实际上有一个主键为 1的myapp_mymodel对象。

为什么 Postgres 会尝试再次使用该主键?或者,这很可能是我的应用程序(或 Django 的 ORM)导致的吗?

刚才这个问题又连续出现了3次。我发现,当它确实发生时,对于给定的表,它会连续发生一次或多次,然后不会再次发生。它似乎在每张桌子完全停止数天之前发生,当它确实发生时每张桌子至少发生一分钟左右,并且只是间歇性地发生(不是所有桌子都立即发生)。

这个错误是如此间歇性的(在 2 周内仅发生 3 次左右 - 数据库上没有其他负载,只是我测试了我的应用程序)这一事实让我对低级问题如此警惕。

postgresql constraint primary-key postgresql-9.2

41
推荐指数
2
解决办法
5万
查看次数

选择 json_agg 中的列

我有一个查询,如:

SELECT a.id, a.name, json_agg(b.*) as "item"
  FROM a
  JOIN b ON b.item_id = a.id
 GROUP BY a.id, a.name;
Run Code Online (Sandbox Code Playgroud)

如何选择在列b,所以我没有b.item_id在JSON对象?

我读过关于ROW,但它返回一个 JSON 对象,如:

{"f1": "Foo", "f2": "Bar"}
Run Code Online (Sandbox Code Playgroud)

一旦获取它以匹配正确的列键,我将需要重新映射 JSON 对象。我想避免这种情况并保留原始列名。

postgresql group-by row json

41
推荐指数
4
解决办法
10万
查看次数

在 PostgreSQL 中增量刷新物化视图

是否可以在 PostgreSQL 中增量刷新物化视图,即仅针对新的或已更改的数据?

考虑这个表和物化视图:

CREATE TABLE graph (
   xaxis integer NOT NULL,
   value integer NOT NULL,
);

CREATE MATERIALIZED VIEW graph_avg AS 
SELECT xaxis, AVG(value)
FROM graph
GROUP BY xaxis
Run Code Online (Sandbox Code Playgroud)

定期添加新值graph或更新现有值。我想graph_avg每隔几个小时刷新一次视图,仅针对已更新的值。但是在 PostgreSQL 9.3 中,整个表都被刷新了。这是相当耗时的。下一个版本 9.4 允许CONCURRENT更新但它仍然刷新整个视图。有数以百万计的行,这需要几分钟。

跟踪更新和新值并仅部分刷新视图的好方法是什么?

postgresql materialized-view postgresql-9.3 postgresql-9.4

41
推荐指数
2
解决办法
3万
查看次数

不同 Postgresql 字符的大小限制

postgresql 中各种数据类型的大小限制是多少?我在某处看到 for character varying(n),varchar(n) n必须在 1 到 10485760 之间。这是真的吗?

什么是有效的尺寸character(n)char(n)text

postgresql varchar

41
推荐指数
1
解决办法
8万
查看次数