我在寻找解决以下问题的最佳选择时遇到了问题(postgres 9.5):
我一次从另一个系统获得大约 100.000 行的更新批次。这种情况通常每 10-15 分钟发生一次,但我可能会同时收到多个批次。批次由“类别”分隔,一个批次只包含来自一个批次的数据。每个“类别”每 10-15 分钟更新一次。新行被插入,旧行被删除,仍然存在的行应该更新为新值。
这带来了表产生大量垃圾数据、VACUUM 进程运行非常缓慢以及一般表性能非常差的问题。
现在我想我可以通过为数据中的每个“类别”创建子表并因此“分片”数据来解决这个问题。
在这种情况下,这是否有意义,还是有更好的选择让我坚持?
FROM提供column_alias,SQL 规范调用这些<derived column list>子句。这就是 postgres 文档对它们的描述,
FROM包含别名的项目的替代名称。别名用于简洁或消除自联接(多次扫描同一个表)的歧义。当提供别名时,它完全隐藏了表或函数的实际名称;例如 givenFROM foo AS f, 的其余部分SELECT必须将此FROM项目称为fnotfoo。如果编写了别名,还可以编写列别名列表来为表的一列或多列提供替代名称。
什么时候需要这些?我什么时候不能只使用 COLUMN 别名?
SELECT t.*
FROM table_name AS t (a,b,c);
Run Code Online (Sandbox Code Playgroud)
对比
SELECT t.col1 AS a, t.col2 AS b, t.col3 AS c
FROM table_name AS t;
Run Code Online (Sandbox Code Playgroud)
这个例子取自@ypercube 选择的答案??这似乎不太有用。
上述上下文中的 FROM 别名不会提供真正的好处,除非您是
这样做似乎依赖于常规t.*堆叠的危害,并增加了晦涩。那么什么时候FROM别名有用呢?
我对 Postgres 中的模式所有者感到困惑。
当我使用AUTHORIZATION关键字定义的所有者创建模式时,所有者可以在该模式中创建对象(pgAdmin4 中的该模式没有显示显式权限)。
但是,当我将架构所有者更改为另一个角色时,此角色无法在该架构中创建对象(除非我明确授予USAGE和CREATE)。
我想,该架构所有者具有对架构执行任何操作的隐式特权。更改架构所有者芯片的正确方法是什么?
基本上,我试图在 postgresql 中的单个命令中进行多次插入,其中我ON CONFLICT有一个 per-insert 参数。
这是查询(格式为psycopg2):
INSERT INTO
web_pages
(url, starturl, netloc, distance, is_text,
priority, type, addtime, state)
VALUES
(%(url)s, %(starturl)s, %(netloc)s, %(distance)s, %(is_text)s,
%(priority)s, %(type)s, %(addtime)s, %(state)s)
ON CONFLICT (url) DO
UPDATE
SET
state = EXCLUDED.state,
starturl = EXCLUDED.starturl,
netloc = EXCLUDED.netloc,
is_text = EXCLUDED.is_text,
distance = LEAST(EXCLUDED.distance, web_pages.distance),
priority = GREATEST(EXCLUDED.priority, web_pages.priority),
addtime = LEAST(EXCLUDED.addtime, web_pages.addtime)
WHERE
(
web_pages.ignoreuntiltime < %(ignoreuntiltime)s
AND
web_pages.url = EXCLUDED.url
AND
(web_pages.state = 'complete' OR web_pages.state = 'error') …Run Code Online (Sandbox Code Playgroud) 这可能是一个非常简单的问题,但对 Google 来说很难,因为它匹配了太多不同的问题。
我想获取保存在我的数据库中的时间戳的时区(或偏移量)。
例如,现在在我的数据库中,我有
expired_at
---------------------
2018-04-28 00:00:00
2018-03-28 08:00:00
2018-02-28 05:00:00
Run Code Online (Sandbox Code Playgroud)
我想找到所有expired_at具有 PST 偏移量的内容。
所以我的伪代码是这样的
SELECT expired_at FROM table WHERE expired_at IS IN TIMEZONE('PST')
我能得到一些帮助吗。谢谢!
附注。基本上,我试图通过查找所有 UTC 时间戳并将它们更新为 PST 来解决数据完整性问题。数据库现在混杂着许多不同的时区。
是否有任何理由使用 JSONB 值数组而不仅仅是原始 JSONB?
我的用例是我需要在 JSON 对象列表中存储自定义表单定义。我的问题是将其存储为原始 JSON 值还是将其拆分为单独的 JSONB 对象会更好。
每种解决方案的优缺点是什么?
我们有以下数据库结构
CREATE TABLE objects (
id int PRIMARY KEY,
name text,
address text
);
CREATE TABLE tasks (
id int PRIMARY KEY,
object_id int NOT NULL,
actor_id int NOT NULL,
description text
);
CREATE TABLE actors (
id int PRIMARY KEY,
name text
);
Run Code Online (Sandbox Code Playgroud)
用户输入以空格分隔的单词列表(基本上是搜索词),我们必须搜索满足以下条件的任务:如果每个搜索词在任务描述的串联中至少出现一次,则该任务是“匹配”,其关联对象的名称和地址以及关联参与者的名称。
现在,如果我们不关心性能,我们可以这样做(给定查询“foo bar”):
SELECT t.id, t.description
FROM tasks AS t
INNER JOIN actors AS a ON t.actor_id = a.id
INNER JOIN objects AS o ON t.object_id = o.id
WHERE to_tsvector(concat_ws(' ', t.description, o.name, o.address, a.name)) @@ …Run Code Online (Sandbox Code Playgroud) postgresql performance full-text-search postgresql-performance
例如,假设我想为 Chicken Ranch 解析这些地址
Chicken Ranch
10511 Homestead Rd
Pahrump, NV 89061
Chicken Ranch
1600 Pennsylvania Avenue
NW Washington, D.C. 20500
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我都想摆脱Rd和Avenue。例如,在第一种情况下,我想获得“Homestead”,而在第二个“Pennsylvania”中。不过,并非每个地址都有这样的名称。
我们有一个 ERP 系统,它允许使用聚合(例如SUM(foo))但不允许使用 DISTINCT(例如SUM(DISTINCT foo).
是否可以创建一个聚合函数 ( SUM_DISTINCT),它返回与 相同的结果SUM(DISTINCT foo),所以SUM_DISTINCT(foo) = SUM(DISTINCT foo)?
我正在尝试将 Barman 配置为备份。当我做一个barman check replica我不断得到:
Server replica:
WAL archive: FAILED (please make sure WAL shipping is setup)
PostgreSQL: OK
superuser: OK
wal_level: OK
directories: OK
retention policy settings: OK
backup maximum age: FAILED (interval provided: 1 day, latest backup age: No available backups)
compression settings: OK
failed backups: OK (there are 0 failed backups)
minimum redundancy requirements: FAILED (have 0 backups, expected at least 2)
ssh: OK (PostgreSQL server)
not in recovery: FAILED (cannot perform exclusive backup on …Run Code Online (Sandbox Code Playgroud) postgresql ×10
address ×1
aggregate ×1
alias ×1
array ×1
barman ×1
distinct ×1
json ×1
performance ×1
permissions ×1
upsert ×1