标签: postgresql

未优化单行的 Postgres CTE 查询

我试图从我的数据库中获取用户统计信息的加权总和,并且我一次只会查询一个或两个用户的表,所以我将它写为一个视图。

由于它是一个视图,我假装计算表中每一行的总和,然后我希望优化器能够意识到当我只要求一行并优化查询时。然而,我的查询计划非常庞大,并且在其最里面计算了 170 亿行,我认为最多应该有 1000 行。

这是查询:

CREATE OR REPLACE VIEW weighted_stats AS
WITH 
    clf AS (SELECT * FROM classifiers order by time_trained desc limit 1),
    weights AS (SELECT kv.key, kv.value from clf, each(clf.weights) AS kv),
    kvs AS (
        SELECT stats.player_id, kv.key, kv.value FROM
        stats, each(stats.hstore_column) AS kv),
SELECT
    stats.player_id,
    SUM(kvs.value :: numeric * weights.value :: numeric) AS stats
FROM
    kvs JOIN weights USING (key)
GROUP BY kvs.player_id;
Run Code Online (Sandbox Code Playgroud)

这是查询计划:

explain analyze select * from weighted_stats where player_id=76561197960269296

GroupAggregate  (cost=53645.35..299471.72 rows=1 …
Run Code Online (Sandbox Code Playgroud)

postgresql cte view

5
推荐指数
1
解决办法
1256
查看次数

触发以创建对称行

我有一个表格,描述了两个项目之间的某种关系。项由 引用ID。我想创建一个触发器,所以每当你创建一行时(a,b),就会创建一个对称的行(b,a)。我试过在触发器之后创建,但它超过了堆栈深度,因为它在插入时调用了它自己。什么是正确的方法呢?

表看起来有点像这样:

CREATE TABLE MY_RELATION(
ID SERIAL,
THING1 INT NOT NULL,
THING2 INT NOT NULL,
PRIMARY KEY (ID)
);

CREATE TABLE MY_THING(
ID SERIAL,
VAL INT NOT NULL
PRIMARY KEY(ID)
);
ALTER TABLE MY_RELATION ADD FOREIGN KEY (THING1) REFERENCES MY_THING(ID);
ALTER TABLE MY_RELATION ADD FOREIGN KEY (THING2) REFERENCES MY_THING(ID);
Run Code Online (Sandbox Code Playgroud)

postgresql trigger database-design

5
推荐指数
1
解决办法
408
查看次数

如何验证查询命中的磁盘

我想知道如何通过selectCentOS 6.5 上的 PostgreSQL 9.4 中的查询来验证磁盘命中。另外请让我知道在多大程度上启用log_statement_statsinpostgresql.conf将帮助我。

当我将上述参数切换到on.

例如,请检查日志片段:

2016-02-03 14:12:45 PST LOG:  statement: select * from test_stats_collect ;
2016-02-03 14:12:45 PST LOG:  QUERY STATISTICS
2016-02-03 14:12:45 PST DETAIL:  ! system usage stats:
        !       0.069489 elapsed 0.027995 user 0.002999 system sec
        !       [0.131979 user 0.146977 sys total]
        !       0/0 [3280/26440] filesystem blocks in/out
        !       0/5 [19/4866] page faults/reclaims, 0 [0] swaps
        !       0 [0] signals rcvd, 0/0 [0/0] messages rcvd/sent
        !       20/116 [125/174] …
Run Code Online (Sandbox Code Playgroud)

postgresql monitoring postgresql-9.4

5
推荐指数
1
解决办法
735
查看次数

更改 AWS 的只读副本的流式复制以触发基于复制

我们有一个 Postgres RDS 实例,我们为它创建了一个只读副本实例。我们面临的问题是,只要在只读副本上有长时间运行的查询(大约 30-40 分钟),它就不会完成并给出冲突错误。发生此冲突的原因是主 RDS 上有更新,该更新反映到只读副本,因为它遵循流式复制方法。正是出于这个原因,也由于新的需求,我们需要每天进行此复制过程,即我们需要基于触发器的方法(类似于每日备份方法)而不是持续更新。

我在AWS的控制台中看到,我们可以设置各种参数。我可以设置一些参数来满足我的要求吗?或者对我来说唯一的出路是删除只读副本实例并使用基于触发器的复制工具(如 Bucardo)并为此使用 EC2 实例?

我真的更喜欢这种方法,通过它我可以调整一些参数并实现我的目标,而不必删除只读副本实例。

postgresql replication aws postgresql-9.3 amazon-rds

5
推荐指数
1
解决办法
3182
查看次数

postgres 有没有类似于 mysql innodb_thread_concurrency 的配置?

InnoDB 提供了一个innodb_thread_concurrency选项来限制 MySQL 一次可以执行的并发存储引擎操作的数量。似乎 InnoDB 控制(调度)其线程的执行。

PostgreSQL 是否提供任何允许我们限制一次执行的并发操作数量的配置?postgresql 是控制其子进程的执行还是将此任务委托给操作系统?

postgresql

5
推荐指数
1
解决办法
272
查看次数

Postgresql 服务器正在运行,但服务似乎已停止

我在 Windows Server 2008 R2 上将 Postgresql 9.4 作为服务运行。它通常是一种魅力,但现在有一种情况,服务器显然正在运行(我可以连接到它,任务管理器显示正在运行的进程),但 Windows 服务似乎已停止。

我尝试使用 pg_ctl,但我得到:

$>pg_ctl restart -D c:\psqldata94
pg_ctl: old server process (PID: 1436) seems to be gone
starting server anyway
server starting
2016-02-23 09:59:00 CET  LOG:  could not bind IPv6 socket: No error
2016-02-23 09:59:00 CET  HINT:  Is another postmaster already running on port  5432? If not, wait a few seconds and retry.
2016-02-23 09:59:00 CET  LOG:  could not bind IPv4 socket: No error
2016-02-23 09:59:00 CET  HINT:  Is another …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.4

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

基于PostgreSQL继承的数据库设计

我正在开发一个简单的保姆应用程序,它有两种类型的用户:“父母”和“保姆”。我使用 postgresql 作为我的数据库,但我在设计我的数据库时遇到了麻烦。

'Parent' 和 'Babysitter' 实体具有可以概括的属性,例如:用户名、密码、电子邮件……这些属性可以放置在名为“用户”的父实体中。它们也都有自己的属性,例如:Babysitter -> age。

就 OOP 而言,事情对我来说非常清楚,只需扩展用户类就可以了,但在 DB 设计中,情况有所不同。在发布这个问题之前,我在互联网上漫游了一周,以寻找对这个“问题”的洞察。我确实找到了很多信息,但
在我看来,有很多分歧。以下是我读过的一些帖子:

/sf/ask/13320751/ : Table-Per-Type (TPT), Table-Per-Hierarchy (TPH) 和 Table- Per-Concrete (TPC) VS '将 RDb 强制转换为基于类的需求是完全不正确的。

多种用户类型 - 数据库设计建议

Table: `users`; contains all similar fields as well as a `user_type_id` column (a foreign key on `id` in `user_types`
Table: `user_types`; contains an `id` and a `type` (Student, Instructor, etc.)
Table: `students`; contains fields only related to students as well as a `user_id` column (a foreign key …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design inheritance

5
推荐指数
1
解决办法
801
查看次数

对于长时间运行的分析查询的备用工作负载,是打开 hot_standby_feedback 还是将 max_standby_*_delay 设置设置为 -1 更好?

当专门为 BI/Analytics 目的启动热备用服务器时,长时间运行的查询可能很常见,是打开hot_standby_feedback还是将max_standby_*_delay设置设置为 -1更好?

我的理解是,这会hot_standby_feedback阻止主服务器执行类似操作,VACUUM直到可以安全地在备用服务器上执行同样的操作,其中max_standby_*_delay设置允许VACUUM在主服务器上开始,但备用服务器(如有必要)会等待应用任何可能与长时间冲突的真空清理运行查询。

此外,文档状态hot_standby_feedback

如果发现备用查询取消的次数不可接受,则存在补救的可能性。第一个选项是设置参数 hot_standby_feedback,它可以防止 VACUUM 删除最近死的行,因此不会发生清理冲突。如果你这样做,你应该注意这会延迟主节点上死行的清理,这可能会导致不受欢迎的表膨胀。但是,清理情况不会比备用查询直接在主服务器上运行更糟糕,并且您仍然可以从将执行卸载到备用服务器上获得好处。

对于max_standby_*_delay文档状态:

如果备用服务器的任务是作为决策支持查询的附加服务器,那么将最大延迟值设置为许多小时或什至 -1 可能是可以接受的,这意味着永远等待查询完成。

我仍然不清楚哪个更好,每个的确切优点和缺点是什么?

postgresql replication performance business-intelligence postgresql-performance

5
推荐指数
1
解决办法
2674
查看次数

如何阅读 postgres.log 输出?

我需要提高我的数据库性能,为了实现这一点,我启用了log我的postgresql.conf

log_statement = 'all'
log_connections = on
log_disconnections = on
Run Code Online (Sandbox Code Playgroud)

为什么我有 3 个duration输出SELECT

2016-02-29 15:35:07 CET [3492-349] postgres@uat LOG:  execute <unnamed>: SELECT ID FROM public.document WHERE documentID is NULL AND StatusID = (SELECT ID FROM public.status WHERE status = 'New') ORDER BY PriorityID DESC, ModTime ASC FOR UPDATE LIMIT 1
2016-02-29 15:35:07 CET [3492-350] postgres@uat LOG:  duration: 31.096 ms
2016-02-29 15:35:08 CET [3494-223] postgres@uat LOG:  duration: 0.090 ms
2016-02-29 15:35:08 CET [3494-224] …
Run Code Online (Sandbox Code Playgroud)

postgresql performance postgresql-performance

5
推荐指数
1
解决办法
4251
查看次数

PostgreSQL 查询计划中的节点类型列表?

我在哪里可以找到查询计划可能包含在 PostgreSQL 中的可能节点类型(例如 Seq scan、groupAggregate、Nested loop ...)的详尽列表?

postgresql execution-plan

5
推荐指数
1
解决办法
1185
查看次数