Questions tagged «postgresql-9.3»

PostgreSQL 9.3版

1
报告的索引大小和执行计划中的缓冲区数之间存在巨大的不匹配
问题 我们有一个类似的查询 SELECT COUNT(1) FROM article JOIN reservation ON a_id = r_article_id WHERE r_last_modified < now() - '8 weeks'::interval AND r_group_id = 1 AND r_status = 'OPEN'; 由于超时(通常在10分钟后)更多,因此我决定调查此问题。 该EXPLAIN (ANALYZE, BUFFERS)输出如下所示: Aggregate (cost=264775.48..264775.49 rows=1 width=0) (actual time=238960.290..238960.291 rows=1 loops=1) Buffers: shared hit=200483 read=64361 dirtied=666 written=8, temp read=3631 written=3617 I/O Timings: …

2
使用PL / pgSQL函数返回记录-加快查询速度
我有一个用Perl编写的非分叉游戏守护进程,该守护进程使用acync查询将玩家统计信息写入PostgreSQL 9.3数据库。但是,当我需要从数据库中读取某些内容时(例如,如果某个播放器被禁止或该播放器具有VIP状态),那么我将使用同步查询。 这使游戏停止片刻,直到从数据库中读取了该值。 我无法重写游戏守护进程以使用异步查询来读取值(我尝试过,但是需要太多更改),所以我的问题是:合并几个不相关的查询(当一个新玩家使用时,我需要进行查询)是否有意义连接)到1过程,我如何同时向我的Perl程序返回几个值? 我当前的所有查询都以玩家ID作为参数并返回1值: -- Has the player been banned? select true from pref_ban where id=? -- What is the reputation of this player? select count(nullif(nice, false)) - count(nullif(nice, true)) as rep from pref_rep where id=? -- Is he or she a special VIP player? select vip > now() …

1
如何“提示”递归CTE的基数?
我使用以下递归CTE作为最小示例,但总的来说,优化程序必须对递归CTE使用默认的“猜测”基数: with recursive w(n) as ( select 1 union all select n+1 from w where n<5 ) select * from w; /* n --- 1 2 3 4 5 */ explain analyze with recursive w(n) as ( select 1 union all select n+1 from w where n<5 ) select * …


2
高效合并(删除重复项)数组
我有两个表,left2和right2。两个表都将很大(1-10M行)。 CREATE TABLE left2(id INTEGER, t1 INTEGER, d INTEGER); ALTER TABLE left2 ADD PRIMARY KEY (id,t1); CREATE TABLE right2( t1 INTEGER, d INTEGER, arr INTEGER[] ); ALTER TABLE right2 ADD PRIMARY KEY(t1,d); 我将执行这种类型的查询: SELECT l.d + r.d, UNIQ(SORT((array_agg_mult(r.arr))) FROM left2 l, right2 r WHERE l.t1 = r.t1 GROUP BY l.d …

1
为什么postgresql pg_dump将视图导出为表?
我正在使用PostgreSQL 9.3 pg_dump工具使用以下方法仅提取公共模式定义: pg_dump -s -n public -h host -U postgres --dbname=db > ./schema.sql 但是当我检查schema.sql我们的一种观点时,它出现在CREATE TABLE声明中而不是CREATE VIEW声明中。 但是,如果我pg_dump使用以下特定视图: pg_dump -s -t myview -h host -U postgres --dbname=db > ./schema.sql 然后schema.sql包含实际的视图定义。 那么,为什么会这样呢?感谢大伙们!

1
PostgreSQL:从视图中删除列
我VIEW正在尝试为其创建演化脚本的位置,因此可以在其中添加一列。那部分工作正常;列添加就好了。但是,相反的方法无效。删除最后添加的列失败并显示一条ERROR: cannot drop columns from view消息。问题在于,这个特定的视图有很多引用,包括从和到的引用,因此,我不能只是DROP CASCADE一个令人毛骨悚然的东西! 为什么无法从给定中删除新添加的列VIEW?然后,我该怎么做才能完成此任务? (注意:这里是实际情况,但在许多其他情况下,我也很可能会看到类似的情况,也就是从视图中删除列。)

3
对billions-rows-table的查询变慢//使用的索引
由于我是一名年轻的开发人员,并且不太熟练使用数据库(PostgreSQL 9.3),因此我在一个项目中遇到了一些问题,我确实需要帮助。 我的项目是关于从设备(最多1000台或更多设备)收集数据的,其中每台设备每秒发送一个数据块,每小时大约发送300万行。 目前,我有一张大表,用于存储每个设备的传入数据: CREATE TABLE data_block( id bigserial timestamp timestamp mac bigint ) 由于数据块可以(或不能)包含多种数据类型,因此还有其他表引用该data_block表。 CREATE TABLE dataA( data_block_id bigserial data CONSTRAINT fkey FOREIGN KEY (data_block_id) REFERENCES data_block(id); ); CREATE TABLE dataB(...); CREATE TABLE dataC(...); CREATE INDEX index_dataA_block_id ON dataA (data_block_id DESC); ... 一个data_block中可能有3x dataA,1x dataB但没有dataC。 数据将保留几周,因此该表中将有约50亿行。目前,表中有约6亿行,而我的查询要花很长时间。因此,我决定在timestamp和上建立索引mac,因为我的select语句总是随时间查询,通常也随时间+ mac查询。 CREATE INDEX …


2
在Postgres 9.3中实现json_object_agg()
我觉得我需要json_object_agg()Postgres 9.4 的功能,但现在无法从9.3升级。有什么方法可以完成我在9.3版中想要的工作吗?这是我的情况。我有一个click_activity看起来像的数据表 user | offer | clicks -----|-------|-------- fred |coupons| 3 fred |cars | 1 john |coupons| 2 但是我想把它变成这样:(汇总每个用户的活动) user | activity -----|---------- fred | {"coupons": 3, "cars": 1} john | {"coupons": 2} 我认为json_object_agg()Postgres 9.4 的功能可以完美地做到这一点,我只需要调用 select user, json_object_agg(offer, clicks) from click_activity group by 1 9.3中有办法吗?谢谢!

2
全文搜索速度慢,出现频率高
我有一个表,其中包含从文本文档中提取的数据。数据存储在名为"CONTENT"GIN 的列中,为此我创建了该索引: CREATE INDEX "File_contentIndex" ON "File" USING gin (setweight(to_tsvector('english'::regconfig , COALESCE("CONTENT", ''::character varying)::text), 'C'::"char")); 我使用以下查询在表上执行全文搜索: SELECT "ITEMID", ts_rank(setweight(to_tsvector('english', coalesce("CONTENT",'')), 'C') , plainto_tsquery('english', 'searchTerm')) AS "RANK" FROM "File" WHERE setweight(to_tsvector('english', coalesce("CONTENT",'')), 'C') @@ plainto_tsquery('english', 'searchTerm') ORDER BY "RANK" DESC LIMIT 5; “文件”表包含25万行,每个"CONTENT"条目均包含一个随机词和一个文本字符串,所有行均相同。 现在,当我搜索一个随机单词(整个表中有1个匹配项)时,查询运行非常快(<100毫秒)。但是,当我搜索所有行中都存在的单词时,查询运行非常慢(10分钟或更长时间)。 EXPLAIN ANALYZE显示对于1命中搜索,先执行位图索引扫描,再执行位图堆扫描。对于慢速搜索,将执行Seq扫描,这花费了很长时间。 当然,在所有行中都有相同的数据是不现实的。但是,由于我无法控制用户上载的文本文档,也无法控制用户执行的搜索,因此可能会出现类似的情况(搜索数据库中出现率很高的术语)。在这种情况下,如何提高搜索查询的性能? 运行PostgreSQL 9.3.4 查询计划EXPLAIN ANALYZE: …

1
相似度函数的最佳索引
因此,我的这张表有620万条记录,而且我必须对该列执行相似的搜索查询。查询可以是: SELECT "lca_test".* FROM "lca_test" WHERE (similarity(job_title, 'sales executive') > 0.6) AND worksite_city = 'los angeles' ORDER BY salary ASC LIMIT 50 OFFSET 0 可以在where中添加更多条件(年份= X,worksite_state = N,status =“已认证”,visa_class = Z)。 运行其中一些查询可能会花费很长时间,超过30秒。有时超过一分钟。 EXPLAIN ANALYZE 前面提到的查询给了我这个: Limit (cost=0.43..42523.04 rows=50 width=254) (actual time=9070.268..33487.734 rows=2 loops=1) -> Index Scan using index_lca_test_on_salary on lca_test …

2
在一系列时间戳(一列)上优化查询
我正在通过Heroku使用Postgres 9.3。 我有一个表“ traffic”,其中有1M +条记录,每天都有许多插入和更新。我需要在此表上的不同时间范围内执行SUM操作,这些调用最多可能需要40秒钟,并且希望听到有关如何改进该建议的建议。 我在此表上有以下索引: CREATE INDEX idx_traffic_partner_only ON traffic (dt_created) WHERE campaign_id IS NULL AND uuid_self <> uuid_partner; 这是一个示例SELECT语句: SELECT SUM("clicks") AS clicks, SUM("impressions") AS impressions FROM "traffic" WHERE "uuid_self" != "uuid_partner" AND "campaign_id" is NULL AND "dt_created" >= 'Sun, 29 Mar 2015 00:00:00 +0000' AND "dt_created" <= …

2
VACUUM ANALYZE为什么不清除所有死元组?
VACUUM ANALYZE VERBOSE在对一些较大的表进行重大DELETE/INSERT更改之后,我们对它们进行了“手动” 处理。这似乎没有问题,尽管有时表的VACUUM工作将运行几个小时(有关类似问题和推理,请参阅此帖子)。 在进行更多研究时,我发现即使在运行后,我们也有包含大量死元组的大表VACUUM。例如,以下是此响应中查询产生的一些统计信息。 -[ RECORD 50 ]--+--------------------------- relname | example_a last_vacuum | 2014-09-23 01:43 last_autovacuum | 2014-08-01 01:19 n_tup | 199,169,568 dead_tup | 111,048,906 av_threshold | 39,833,964 expect_av | * -[ RECORD 51 ]--+--------------------------- relname | example_b last_vacuum | 2014-09-23 01:48 last_autovacuum | 2014-08-30 12:40 n_tup | 216,596,624 …

1
PostgreSQL流与基于文件的复制(就服务器行为和配置而言)
我试图了解PostgreSQL复制的最佳用法及其工作方式,以便在生产环境中进行故障排除。 我很难理解以下两种复制类型之间的区别:(1)配置(2)在每种情况下主/从2个服务器的性能 在PostgreSQL(9.2+)上的复制实际上是在Master上创建大小为16MB的XLOG文件(取决于创建每个文件的频率设置),并通过某种方法发送到Slave。 我的设置(出于这个问题的目的) 在主archive_command ='rsync -av%p postgres @ [SlaveIP]:[wal_archive_folder] /%f' 上配置Postgresql.conf 从属服务器上配置Recovery.conf以读取日志文件 restore_command ='cp [wal_archive_folder] /%f \“%p \”' primary_conninfo ='主机= [MasterIP]端口= 5432 user = postgres' 我的问题是,此配置的哪一部分使这种“流式”复制与“日志传送”相比较?我的主服务器配置为使用rsync将日志发送到从服务器(此日志是否发送?)我的从服务器配置为能够在recovery.conf中连接到主服务器(此数据流吗?) 问题的第二部分:发生了什么?我了解PostgreSQL上还有一个通过WAL_sender和WAL_receiver的协议。但是我不清楚这是否仅用于流式传输,如果是,则rsync在主服务器中如何使用? :) 谢谢!!很抱歉,如果这是一个明显的问题。我一直在阅读大量的博客/书籍,但是很难理解。Postgres Wiki的深度是如此之深,以至于需要花很长时间才能完全理解(我有最后期限)

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.