我正在使用一个称为updated_at缓存失效的时间戳列。此处提供有关此特定技术的更多信息。
查询都具有相同的格式
UPDATE "managers" SET "updated_at" = '2014-07-25 15:00:24.212512' WHERE "managers"."id" = 1
问题是此列上的活动过多,导致写入缓慢。我假设减速是由锁定机制引起的。列上没有索引。
我们一直试图通过将可能导致多次更新的操作批处理来缓解这种情况,这确实有所帮助,但整个系统仍然受到影响。
我们实际上正在考虑将其移至 redis 并使用 INCR。
表“public.managers”
专栏 | 类型 | 修饰符
-------------------------+------------------------ -----+-------------------------------------------- -----------------
身份证 | 整数 | 非空默认 nextval('leads_managers_id_seq'::regclass)
account_id | 整数 |
created_at | 没有时区的时间戳 |
更新时间 | 没有时区的时间戳 |
通知_收件人| 文字 | 默认 ''::character 变化
用户名 | 字符变化(255) |
索引:
“leads_managers_pkey”主键,btree (id)
"index_leads_managers_on_uuid" UNIQUE, btree (uuid)
"index_leads_managers_on_account_id" btree (account_id)
已经有一个问题“如何使用 psql 为 SQL 查询计时? ”但我缺少如何从命令行执行此操作的答案。如何从命令行运行带有(可选)计时\timing [on|off]的脚本- 请不要在脚本中运行?
我一直在计算包含大约 500.000 条双精度数字记录的列的总和。数据库中的所有数字通常应该是句点后面的两个密码。但是,在计算总和后,我得到了 6 个数字:123123123.549977
要么我的数据库中有错误的数据,其中在句点之后有更多数字的记录,要么我遗漏了 sum 函数。
所以我的问题是:
使用此命令,我可以生成 1 和 200,000 之间的 16384 个随机整数。
SELECT generate_series (1,16384),(random()*200000)::int AS id
Run Code Online (Sandbox Code Playgroud)
我想生成 10 组这样的整数。每个集合必须有一个整数标识符,类似于:
1 | 135
1 | 1023
...第一组 16384 个随机数结束
2 | 15672
2 | 258732
... 第二组 16384 个随机数结束
这可以通过 SQL 命令实现,还是我应该为此编写一个函数?
目前我有一个 hstore 来描述各种项目的属性。搜索时,我需要删除每个项目唯一的值(例如序列号、vin 等)。根据 postgresql 文档,我应该能够使用以下运算符从 hstore 中删除密钥
根据 postgres 文档
hstore - text delete key from left operand 'a=>1, b=>2, c=>3'::hstore - 'b'::text
在我的代码中,我有
IF item.details ? 'vin' THEN
item.details::hstore - 'vin'::TEXT;
END IF;
当我去创建函数时,我收到语法错误
'“::”处或附近的语法错误'
当我从值的末尾删除类型声明时,我收到错误
'“-”处或附近的语法错误'
据我所知,这符合 postgres 文档所说的操作员应该在http://www.postgresql.org/docs/9.3/static/hstore.html 上工作的方式。有什么我想念的吗?
我正在使用 Postgres DB 为大量计算机/进程实现作业调度。简而言之,每个作业都有其 id,所有调度都通过三个选项卡实现:所有作业、当前正在运行的作业和已完成的作业。
调度的关键功能是 (1) 请求作业和 (2) 通知 DB 已完成的作业。请求作业从作业列表中获取任何 id,它不在运行表中,也不在已完成表中:
insert into piper.jobs_running
select x.fid from (
SELECT fid FROM piper.jobs
except
select fid from piper.jobs_running
except
select fid from piper.jobs_completed
) as x limit 1
returning(fid)
Run Code Online (Sandbox Code Playgroud)
完成作业会将其从运行列表中删除,并将其插入到已完成列表中。因为它不是特定于并发的,所以我省略了 SQL 命令(完成一项工作需要几十分钟到几个小时。)
对我来说,这是一个令人讨厌的惊喜,上面运行完全相同的查询的两个进程(几乎同时请求作业)可能会获得相同的作业 ID (fid)。我要提出的唯一可能的解释是 Postgres 不依赖 ACID 一致性。注释?
附加信息:我将事务设置为可序列化(在postgresql.conf 中 set default_transaction_isolation = 'serializable')。现在,如果隔离未完全填充,DBMS 会使事务失败。是否可以强制 Postgres 自动重新启动它们?
我可以通过 NFS 使用两个不同的节点创建一个 HA postreges 集群吗?
根据 postgresql 9.4 官方文档,这不是一个好主意,但我在网上找不到任何其他信息。
我继承了一些问题,我需要确定 pgAgent 是否存在于一定数量的安装 (CentOS) 上并且正在运行后台作业。这些作业可以从 cron、pgAgent 或外部调用者运行。
如果我正在查看 postgres 实例而不使用 pgAdmin,我如何确定是否安装了 pgAgent?
这可以从命令行或psql客户端完成吗?如果可能的话,我更喜欢 pgAdmin。
我有一个物化视图,创建大约需要 57 秒,并且我使用的是 PostgreSQL 9.4。
当我插入表时,触发器将调用触发器函数,该函数将REFRESH MATERIALIZED VIEW CONCURRENTLY view触发触发器after each statement(插入、更新、删除)
发生的情况是,执行插入操作大约需要 57 秒。
如何解决此问题并仍然使用物化视图?
我已经实现了很长时间,从来没有出现过这个问题,最近我添加了pgbouncer,会不会是这个原因?
我只想知道是否有任何免费工具可以识别 PostgreSQL 中特定查询的 CPU 利用率。
postgresql ×10
concurrency ×2
acid ×1
except ×1
hstore ×1
locking ×1
operator ×1
performance ×1
pgbouncer ×1
psql ×1
random ×1
sum ×1
update ×1