如果没有返回行,我想为应该使用的列使用默认值。这在 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。
我有两个数据库表。其中一个包含数亿条记录。让我们称之为那个history。另一个是每天计算的,我想将其所有记录复制到history一个中。
我所做的是运行:
INSERT INTO history SELECT * FROM daily
它在一段时间内起到了作用,但随着记录数量的不断增加,它开始变得越来越慢。现在我有大约 200 万条记录需要在单个操作中从复制daily到复制,history并且需要很长时间才能完成。
是否有另一种更有效的方法将数据从一个表复制到另一个表?
我已经配置ssl = on的postgresql.conf(并且安装了证书等等)。这是否确保所有客户端始终通过 SSL 连接?
(也就是说,ssl = on如果没有SSL 加密就无法连接吗?)
是否有其他方法可以确保所有客户端始终通过 SSL/TLS 进行连接?
有没有一种系统的方法可以强制 PostgreSQL 将特定表加载到内存中,或者至少从磁盘中读取它以便系统缓存它?
我已经阅读了UPSERTPostgreSQL 中的不同实现,但所有这些解决方案都相对较旧或相对奇特(例如,使用可写 CTE)。
而且我根本不是 psql 专家,无法立即找出这些解决方案是否过时,因为它们被很好地推荐,或者它们(好吧,几乎所有这些都是)只是不适合生产使用的玩具示例。
在 PostgreSQL 中实现 UPSERT 的最线程安全的方法是什么?
我想对包含我为 PostgreSQL 编写的用户定义函数的查询进行基准测试。有没有标准的方法来运行这样的基准测试?
我知道可以\timing在 psql 提示符下打开计时,但理想情况下,我想要一个自动处理所有事情的脚本:运行查询几次,每次运行后清除 PostgreSQL 缓存(可能通过重新启动 PostgreSQL 的服务),并输出平均运行时间(使用的内存是一个加号)。
我正在使用 Django,但每隔一段时间我就会收到此错误:
IntegrityError:重复键值违反唯一约束“myapp_mymodel_pkey”
详细信息:键(id)=(1)已经存在。
我的 Postgres 数据库实际上有一个主键为 1的myapp_mymodel对象。
为什么 Postgres 会尝试再次使用该主键?或者,这很可能是我的应用程序(或 Django 的 ORM)导致的吗?
刚才这个问题又连续出现了3次。我发现,当它确实发生时,对于给定的表,它会连续发生一次或多次,然后不会再次发生。它似乎在每张桌子完全停止数天之前发生,当它确实发生时每张桌子至少发生一分钟左右,并且只是间歇性地发生(不是所有桌子都立即发生)。
这个错误是如此间歇性的(在 2 周内仅发生 3 次左右 - 数据库上没有其他负载,只是我测试了我的应用程序)这一事实让我对低级问题如此警惕。
我有一个查询,如:
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 中增量刷新物化视图,即仅针对新的或已更改的数据?
考虑这个表和物化视图:
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 中各种数据类型的大小限制是多少?我在某处看到 for character varying(n),varchar(n) n必须在 1 到 10485760 之间。这是真的吗?
什么是有效的尺寸character(n),char(n)和text?
postgresql ×10
aggregate ×1
benchmark ×1
cache ×1
constraint ×1
group-by ×1
json ×1
memory ×1
plpgsql ×1
primary-key ×1
row ×1
select ×1
upsert ×1
varchar ×1