标签: postgresql

PostgreSQL 9.1 - 查询视图需要很多时间

使用 PostgreSQL 9.1,我们在 PostgreSQL 的 VIEW 上执行查询时遇到问题。以下是情况:

我们有一个分区表“buz_scdr”,我们在它上面构建了一个视图“Swiss_client_wise_minutes_and_profit”。此 VIEW 的目的是连接来自不同表(包括“buz_scdr”表)的数据以进行高效查询。这个策略一直运行良好,直到表“buz_scdr”变得巨大(所有分区中的整体记录变得巨大。该表基于日期进行分区)。

在此 VIEW 上执行的查询开始需要很长时间(大约 5 到 10 分钟)。为了弄清楚为什么这个查询需要这么长时间才能执行,我们使用 EXPLAIN 命令来显示它的执行计划。我们使用的查询如下:

EXPLAIN SELECT * from  "Swiss_client_wise_minutes_and_profit" where start_time = '2012-7-22 08:00';
Run Code Online (Sandbox Code Playgroud)

其结果在explain.depesz.com 上或如下:

   Subquery Scan on "Swiss_client_wise_minutes_and_profit"  (cost=2127919.71..94874537.55 rows=40474 width=677)
   Filter: ("Swiss_client_wise_minutes_and_profit".start_time = '2012-07-22 08:00:00+00'::timestamp with time zone)
   ->  WindowAgg  (cost=2127919.71..94773352.06 rows=8094839 width=148)
         ->  Sort  (cost=2127919.71..2148156.81 rows=8094839 width=148)
               Sort Key: cc.name, rdga.group_id
               ->  Hash Left Join  (cost=1661.50..604234.77 rows=8094839 width=148)
                     Hash Cond: (((cc.company_id)::text = (rdga.company_id)::text) AND ((cs.c_prefix_id)::text = (rdga.dest_id)::text))
                     ->  Hash …
Run Code Online (Sandbox Code Playgroud)

postgresql performance view partitioning subquery query-performance

3
推荐指数
1
解决办法
6823
查看次数

PL/pgSQL 函数创建中的错误

我不知道这个问题是否更适合这里或 SO ...

这是我想启动的脚本(该函数的代码是从 SO 上的一个问题复制的):

\c mydb

create or replace function truncate_tables(username in varchar) returns void as $$
declare
    stmt RECORD;
    statements cursor for select tablename from pg_tables where tableowner = username;
begin 
    for stmt in statements loop
        execute 'truncate table ' || quote_ident(stmt.tablename) || ' CASCADE ;';
    end loop;
end;
$$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ERROR: syntax at or near "$1"    LINE1:   $1
QUERY $1
CONTEXT: SQL statement in PL/PgSQL function "truncate_tables" near line 5
Run Code Online (Sandbox Code Playgroud)

我是 Postgres …

postgresql dynamic-sql cursors plpgsql postgresql-8.3

3
推荐指数
1
解决办法
741
查看次数

PostgreSQL 中关键字“ID”的用途是什么?

我是 PostgreSQL 的新手,在使用以下查询时遇到了问题:

SELECT * FROM table1 WHERE ID = 1
Run Code Online (Sandbox Code Playgroud)

错误:列“id”不存在第 2 行:WHERE ID = 1

其中 ID 是我通过 GUI 工具添加的列。

然后我发现 ID 是我当前版本的 PSQL 中的一个关键字,应该被引用。但我无法识别这个 ID 是做什么用的。

在链接页面上有以下通知:

在学习表 C-1 之前,重要的是要了解在 PostgreSQL 中没有保留关键字 (==true) 的事实并不意味着与该词相关的功能没有实现。

所以,ID 没有被标记为 PostgreSQL 关键字,似乎有一个功能与之相关,但我找不到哪个。SELECT ID 本身变成与上面发布的相同的错误消息。

postgresql syntax features reserved-word postgresql-9.1

3
推荐指数
1
解决办法
1673
查看次数

PostgreSQL SELECT 的速度是否会受到表中索引过多的不利影响?

我读过,当数据库上有很多索引时,它会严重损害性能,但在 PostgreSQL 文档中我找不到任何关于它的信息。

我有一个非常大的表格,大约有 100 列和 10 亿行,我经常需要在许多不同的领域进行大量搜索。

如果我添加很多索引(可能是 10 个唯一列索引和 5 到 7 个三列索引),PostgreSQL 表的性能是否会下降?

编辑:随着性能下降,我的意思是SELECT性能;该数据库将每月仅一次,所以更新UPDATEINSERT速度不是问题。

postgresql performance index

3
推荐指数
1
解决办法
1223
查看次数

具有可变数量的不同类型“属性”的模型。

我想要一张显微镜载玻片表,除了基本 id、name、date_created 之外,每张载玻片还有许多可编辑的“属性”。

想象一张幻灯片有

  • 肿瘤类型
  • 染料类型
  • 描述
  • 注射日期

其他一些幻灯片可能有例如:

  • 患者姓名
  • 治疗后
  • 描述

我无法将所有这些存储在幻灯片表中,因为我希望用户能够选择使用过的属性或添加新的属性(如果他们愿意)。每个属性也应该有一个类型,因为有些是整数,有些是文本,有些是例如日期和时间,我很想为它们呈现一个小部件以简化这些值的编辑。

我计划使用MySQL,然后有人指出我使用PostgreSQL及其hstore,但这对我来说感觉像是一个边缘实验功能。有什么建议我应该怎么做?

这是我想出的,但对我来说感觉不对: +-UML 表示我要在这里解释的内容:)

此外,如果有任何不同,所有这些都将在 Django (Python) 中结束。

mysql postgresql database-design

3
推荐指数
1
解决办法
1289
查看次数

使用 LIMIT 和 OFFSET 从内连接中检索数据

这是我的两张表:
table1

qid[PK]     |gid[PK]  |abcd     | xyz  |    date
---------------+---------+---------+------+------------
 00001      |     qwe |      54 |    a | 1994-11-29
 00002      |     asd |       0 |    s | 1994-11-29
 00003      |     azx |      50 | 0.25 | 1994-11-27
Run Code Online (Sandbox Code Playgroud)

表2

qid[PK]     | gid[PK] | user[PK]
------------+---------+--------
 00001      |     qwe | shreya
 00001      |     qwe | nagma
 00001      |     qwe | koena
 00001      |     qwe | paoli
 00002      |     asd | anushka
 00002      |     asd | angelina
 00003      |     azx | jolie
 00003 …
Run Code Online (Sandbox Code Playgroud)

postgresql join jdbc

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

3
推荐指数
1
解决办法
2233
查看次数

查询优化或缺少索引?

我有这个查询将一些数据从t2into聚合t1。这样做是为了优化我正在处理的应用程序,以便减少对数据库的查询。我选择了下面的方法来确保我不必更新t1两次。

最大的问题是,我可能在这里遗漏了哪些索引,查询可以进一步优化吗?

update t1
set
  col1 = t2.col1_count,
  col2 = t2.col2_sum,
  col3 = t2.col3_sum
from  (
  select
    b.user_id, b.t1_id,
    coalesce(count(b.id), 0) as col1_count,
    sum(case when b.col5 = true then b.col2 else 0 end) as col2_sum,
    sum(case when b.col5 = false then b.col3 else 0 end) as col3_sum
  from t1 a 
    left join t2 b on b.t1_id = a.id
  where
    b.user_id = 1
  group by b.user_id, b.t1_id
) as t2
where 
  t2.t1_id = t1.id;
Run Code Online (Sandbox Code Playgroud)

编辑 …

postgresql

3
推荐指数
1
解决办法
1528
查看次数

PostgreSQL 7.4 数据损坏

我们正在处理以下情况(PG 版本为 7.4.30):不知何故,pg_database 中缺少一个数据库(psql \l 列表不再显示它)。更多,虽然您仍然可以 \c 到它,\d 表列表只显示表的一小部分。现有表上的 \d 也显示丢失的列。但是,所有表(仍然可见或不可见)都可以通过 psql 查询,结果集中的实际数据和列似乎很好。

我们备份了数据文件夹,并在过去 24 小时内尝试将情况恢复到 pg_dump 可以工作的程度。不幸的是,尽管我们在之前的类似帖子中尝试了大量建议,但我们还没有完全成功。Reindex 没有帮助,但是“VACUUM FULL FREEZE [ANALYZE]”确实释放了已用磁盘空间的 70%(14GB 到 4)。当然,数据库并没有像它应该的那样定期清空:

警告:某些数据库在超过 20 亿个事务中没有被清空详细信息:您可能已经遭受了事务环绕数据丢失。

没有冻结选项的完全真空确实使所有数据库、表和用户可见,但会重复,即 \l 然后显示数据库两次,数据库上的 \d 列出所有表两次。postgres 用户在 pg_user 等中出现两次。如果数据库未列出,pg_dump 将不起作用,如果 postgres 用户重复,则 pg_dump 将不起作用。

这对任何人来说听起来都很熟悉吗?遗憾的是,所有数据似乎都在那里,但我们无法将其恢复并还原到干净的数据库中。我们将不胜感激任何建议。

谢谢!

PS:我也在等待来自pgsql-admin邮件列表的反馈。

postgresql

3
推荐指数
1
解决办法
513
查看次数

在新分区上创建数据库

我在 ubuntu 12.04 上使用 postgresql 9.1。我已经安装了 depot 软件包。

我在我的系统中添加了一个新分区,我想在这个分区上创建一个 postgresql 数据库(它将完全专用于这个数据库)。

我的 pgdata 位于var/lib/postgresql/9.1/main. 我打算停止 postgresql 服务,将 pgdata 内容复制到新分区,然后创建一个指向新分区的符号链接,chown将新目录指向 postgres 用户,重新启动 postgresql ......但恐怕这一切看起来更像是一个黑客。

有没有办法专门在指定的分区上创建数据库?更“规范”的东西(不是与 ubuntu 的文字游戏)

postgresql postgresql-9.1

3
推荐指数
1
解决办法
2281
查看次数