Questions tagged «postgresql-9.3»

PostgreSQL 9.3版

5
如何将json数组转换为postgres数组?
我有一列data,其中包含一个json大致像这样的文档: { "name": "foo", "tags": ["foo", "bar"] } 我想将嵌套tags数组转换为串联字符串(foo, bar)。array_to_string()从理论上讲,这很容易实现。但是,此功能不适用于json数组。所以我想知道如何将该json数组转换为Postgres array?

1
在同一查询中具有不同条件的Postgres计数
编辑 Postgres 9.3 我正在处理具有以下架构的报告:http : //sqlfiddle.com/#!15/fd104/2 当前查询工作正常,如下所示: 基本上它是一个3表内部联接。我没有进行此查询,但是留下查询的开发人员想修改查询。如您所见,TotalApplication只计算基于的总申请量a.agent_id。您可以totalapplication在结果中看到该列。我要删除的是并将其更改totalapplication为新的两列。我想添加completedsurvey和partitalsurvey列。所以基本上这部分将成为 SELECT a.agent_id as agent_id, COUNT(a.id) as CompletedSurvey FROM forms a WHERE a.created_at >= '2015-08-01' AND a.created_at <= '2015-08-31' AND disposition = 'Completed Survey' GROUP BY a.agent_id 我刚刚添加了,AND disposition = 'Completed Survey'但是我需要另一列partialsurvey具有相同查询的列,completedsurvey唯一的区别是 AND disposition = 'Partial Survey' 和 COUNT(a.id) as PartialSurvey 但是我不知道将查询放在哪里或查询的样子,所以最终输出包含这些列 agent_id, …


2
在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 定期将新值添加到graph或更新现有值。我只想graph_avg每两个小时刷新一次已更新值的视图。但是在PostgreSQL 9.3中,整个表都被刷新了。这非常耗时。下一版本9.4允许CONCURRENT更新,但仍刷新整个视图。对于亿万行,这需要几分钟。 跟踪更新和新值并仅部分刷新视图的好方法是什么?

2
如何处理由于范围类型完全相等而导致的错误查询计划?
我正在执行更新,其中我需要对tstzrange变量进行完全相等的处理。约100万行被修改,查询耗时约13分钟。的结果EXPLAIN ANALYZE可以在此处看到,实际结果与查询计划者估算的结果有很大不同。问题在于索引扫描开启t_range期望返回一行。 这似乎与以下事实有关:范围类型的统计信息与其他类型的统计信息存储方式不同。综观pg_stats为列图,n_distinct是-1和其它字段(例如most_common_vals,most_common_freqs)是空的。 但是,必须在t_range某处存储统计信息。一个非常相似的更新,其中我在t_range上使用“内”而不是完全相等,需要大约4分钟的时间来执行,并且使用完全不同的查询计划(请参阅此处)。第二个查询计划对我来说很有意义,因为将使用临时表中的每一行以及历史记录表的大部分。更重要的是,查询计划人员为上的过滤器预测了大约正确的行数t_range。 的分布t_range有点不寻常。我正在使用此表存储另一个表的历史状态,并且对另一个表的更改会在大型转储中一次全部发生,因此没有许多不同的值t_range。以下是与的每个唯一值相对应的计数t_range: t_range | count -------------------------------------------------------------------+--------- ["2014-06-12 20:58:21.447478+00","2014-06-27 07:00:00+00") | 994676 ["2014-06-12 20:58:21.447478+00","2014-08-01 01:22:14.621887+00") | 36791 ["2014-06-27 07:00:00+00","2014-08-01 07:00:01+00") | 1000403 ["2014-06-27 07:00:00+00",infinity) | 36791 ["2014-08-01 07:00:01+00",infinity) | 999753 t_range以上不同的计数已经完成,因此基数约为3M(其中1M会受到任一更新查询的影响)。 为什么查询1的性能比查询2差得多?就我而言,查询2是一个很好的替代品,但是如果确实需要精确的范围相等性,我如何才能使Postgres使用更智能的查询计划? 带索引的表定义(删除不相关的列): Column | Type | Modifiers ---------------------+-----------+------------------------------------------------------------------------------ history_id | integer | not null default nextval('gtfs_stop_times_history_history_id_seq'::regclass) t_range …

6
如何获得用户所属的所有角色(包括继承的角色)?
假设我有两个Postgresql数据库组,即“作者”和“编辑”,以及两个用户,“ maxwell”和“ ernest”。 create role authors; create role editors; create user maxwell; create user ernest; grant authors to editors; --editors can do what authors can do grant editors to maxwell; --maxwell is an editor grant authors to ernest; --ernest is an author 我想编写一个性能函数,该函数返回maxwell所属角色(最好是其oid)的列表,如下所示: create or replace function get_all_roles() returns oid[] …

2
PostgreSQL最大化性能SSD
我将拥有一个庞大的PostgreSQL 9.3数据库,其中包含许多表,每个表的条目超过100M。该数据库基本上将是只读的(一旦我填写了所有必要的表,并且不再在DB上进行写操作,就不再建立索引)和单用户访问(从本地主机运行并基准化多个查询),因为将使用DB仅用于研究目的。查询将始终在整数DB字段上使用JOIN。 我可能会为此目的购买SSD(256-512GB)。我以前没有为数据库使用SSD,所以我应该担心什么?我可以将整个数据库放到SSD上还是将索引放到硬盘上?调整PostgreSQL的SSD是否需要任何特别的建议/教程?请注意,我有一个不错的工作站,配备了i7和32Gb RAM,因此也许您也可以在那里提供一些建议。

2
如果查询在逻辑上相似,为什么计划会有所不同?
我编写了两个函数来回答《七周》中“七个数据库”中第3天的第一个作业问题。 创建一个存储过程,您可以在其中输入自己喜欢的电影标题或演员的名字,它将根据演员出演的电影或类似类型的电影返回前五个建议。 我的第一次尝试是正确的但很慢。返回结果最多可能需要2000毫秒。 CREATE OR REPLACE FUNCTION suggest_movies(IN query text, IN result_limit integer DEFAULT 5) RETURNS TABLE(movie_id integer, title text) AS $BODY$ WITH suggestions AS ( SELECT actors.name AS entity_term, movies.movie_id AS suggestion_id, movies.title AS suggestion_title, 1 AS rank FROM actors INNER JOIN movies_actors ON (actors.actor_id = movies_actors.actor_id) INNER JOIN …


4
交易中的交易
如果例如以下脚本被调用,PostgreSQL将显示什么行为? BEGIN; SELECT * FROM foo; INSERT INTO foo(name) VALUES ('bar'); BEGIN; <- The point of interest END; PostgreSQL会放弃第二个BEGIN还是会隐式地决定提交,然后BEGIN END作为单独的事务最后运行该块?

2
如何加快选择特色?
我对某些时间序列数据有一个简单的选择: SELECT DISTINCT user_id FROM events WHERE project_id = 6 AND time > '2015-01-11 8:00:00' AND time < '2015-02-10 8:00:00'; 而且需要112秒。这是查询计划: http://explain.depesz.com/s/NTyA 我的应用程序必须执行许多不同的操作,并像这样计数。有没有更快的方法来获取此类数据?

1
用于postgreSQL的版本控制工具
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 谁能为PostgreSQL建议一个基于Windows的版本控制工具。 致谢,GP


4
如何使pg_dump跳过扩展名?
这是在9.3上,但我可以记住从7.x开始发生的类似事情。所以我创建数据库并将plpgsql扩展安装到其中。稍后,我创建一个pg_dump,然后将其恢复到数据库之前,请确保它也具有plpgsql扩展名。然后在还原时会发生这种情况: pg_restore: creating EXTENSION plpgsql pg_restore: creating COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] Error while PROCESSING TOC: pg_restore: [archiver (db)] Error from TOC entry 2053; 0 0 COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql Command was: COMMENT ON EXTENSION plpgsql …

3
具有WHERE条件和GROUP BY的SQL查询的索引
我试图确定要用于带有WHERE条件的SQL查询的索引,GROUP BY而当前正在运行的索引非常慢。 我的查询: SELECT group_id FROM counter WHERE ts between timestamp '2014-03-02 00:00:00.0' and timestamp '2014-03-05 12:00:00.0' GROUP BY group_id 该表当前有32.000.000行。当我增加时间范围时,查询的执行时间会增加很多。 有问题的表如下所示: CREATE TABLE counter ( id bigserial PRIMARY KEY , ts timestamp NOT NULL , group_id bigint NOT NULL ); 我目前有以下索引,但是性能仍然很慢: CREATE INDEX ts_index ON counter USING btree (ts); …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.