标签: postgresql

在Postgres中有效地估计平均值和中位数?

我有一个包含十亿级表的 Postgres 数据库。所以任何聚合函数,例如count() 和avg(),以及“order by random()”都是非常耗时的。Postgres 有 pg_catalog,其中包含许多描述数据库的有用统计信息(例如视图 pg_stats 中的直方图箱)。有没有办法利用 pg_catalog 中的统计信息来估计 Postgres 表中数字列的平均值和中位数?

postgresql statistics scalability

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

可能无法释放 TEMPORARY 表占用的磁盘空间的所有原因/可能性是什么?

我们使用的是 PostgreSQL v8.2.3。我们是一个基于 web 的应用程序,我们使用 pgpool-II v 2.0.1 纯粹是为了连接池(我们不使用 pgpool 的其他功能,如复制、负载平衡等)。

最近,在我们的生产服务器中,数据库磁盘空间出现了意外的急剧增长。在短短 2 天内,数据库大小从 6 GB 增长到 14 GB。

然后我运行以下查询来查找数据库中前 20 个最大关系的大小:

SELECT nspname || '.' || relname AS "relation",
pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class
C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN
('pg_catalog') ORDER BY pg_total_relation_size(C.oid) DESC LIMIT 20;
Run Code Online (Sandbox Code Playgroud)

我在这里没有发现任何问题。甚至我可以说上述命令的“total_size”之和小于数据库本身占用的大小。我正在使用以下命令来查找数据库的大小:

select oid, datname, pg_database_size(datname) as actualsize,
pg_size_pretty(pg_database_size(datname)) as size from pg_database order by
datname;
Run Code Online (Sandbox Code Playgroud)

我也曾经使用以下命令物理检查占用的数据库大小:

du -sh /usr/local/pgsql/data/base/2663326
Run Code Online (Sandbox Code Playgroud)

然后我从位置“ /usr/local/pgsql/data/base/2663326 ”开始按降序物理列出文件大小。这里,“2663326”是我的数据库的 OID。

[root@dbserver 2663326]# …
Run Code Online (Sandbox Code Playgroud)

postgresql database-size disk-space temporary-tables

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

PostgreSQL pl/perl 触发器,区分 null 和空

我一直在尝试加快我在 pl/pgsql 中编写的通用审计触发器的速度。更新时,它会生成正在更新的表中的列列表,并在审计表中插入记录任何更改的行(按表、列、之前的数据、之后的数据等)。跨多个表使用相同的触发器函数。

我正在尝试使用 pl/perl,因为它对于手头的任务似乎要快得多,但我似乎遇到了区分数据库中 NULL 和空字符串 ('') 值的问题。

在我看来,如果一列从 NULL 变为空字符串(反之亦然),这是我需要记录的更改。但是,使用可用的新/旧列引用 ($_TD->{new/old}{$columnName}),我似乎无法区分实际为空的列和包含空字符串的列。我知道为空的列正在被空和 undef 检查捕获,我知道的列也是空的。

    if($_TD->{new}{$column} eq '') {
        elog(NOTICE, "New value in column $column is empty");
    }
    if($_TD->{old}{$column} eq '') {
        elog(NOTICE, "Old value in column $column is empty");
    }
    if($_TD->{new}{$column} eq undef) {
        elog(NOTICE, "New value in column $column is not defined");
    }
    if($_TD->{old}{$column} eq undef) {
        elog(NOTICE, "Old value in column $column is not defined");
    }
Run Code Online (Sandbox Code Playgroud)

我怀疑我在这里做了一些愚蠢的事情,但也许我正在尝试做一些我根本无法做的事情。有什么建议吗?

编辑 - 使用 Postgres 8.4.4 的价值

编辑 - 在查看下面 filiprem …

postgresql trigger null perl

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

Postgres 服务器访问仅限于数据库列表中的一个数据库

我试图在服务器端限制连接到 LAN 的用户只能查看和访问我系统中的数据库列表中的 1 个数据库。

我怎样才能做到这一点?

我试过了

host    db_name     all       (connecting_ip)/32          krb5

host    db_name     all       (connecting_ip)/32          ident

host    db_name     all       (connecting_ip)/32          crypt

host    db_name     all       (connecting_ip)/32          trust
Run Code Online (Sandbox Code Playgroud)

这些参数在pg_hba.conf文件中已经改过了,改了之后还是不行。

请帮助提供有关如何解决此问题的解决方案,以便任何访问具有数据库列表的服务器中的数据库的用户只能查看和访问所需的数据库。

postgresql

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

Postgres 9.1 负载均衡/MPP

我正在尝试为大数据分析设置一个测试平台(基本上大约 2 到 3 TB 的基础,轻微写入 [仅提供数据库],但可能出于分析目的读取密集查询)。

由于我对 vanilla PostgreSQL 有一定的经验(但有 10GB 的基础),我正在考虑尝试 9.1 新的同步复制来实现负载平衡。目标是让 Tableau 响应迅速。因此,我可以避免昂贵的 MPP GreenPlum、AsterData 等。

但是,我想知道: - 直接使用 MPP 数据库(例如 GreenPlum)是否是个好主意?(对于 2-3 TB,真的需要 Greenplum 吗?) - 一旦同步复制启动并运行,我应该如何配置我的应用程序?负载平衡是由主机完成还是需要其他解决方案(例如 Pgpool)?

谢谢你的见解!

postgresql

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

VACUUM 和 VACUUM FULL 不会将空间返回给操作系统

我正在运行 Postgres 8.3.3。我在 Linux 文件系统上有一个非常完整的 postgres 数据库。我已经运行了 VACUUM 和 VACUUM FULL,但没有任何空间返回给操作系统。当我在 postgres 中观察表的大小时,它表明该表使用的空间要少得多(从 80MB 到 800MB)。

还有什么应该运行的吗?

postgresql

5
推荐指数
2
解决办法
2227
查看次数

跨维度的数据库即服务 (DbaaS)——性能、可扩展性和可靠性?

MySql 数据库即服务:

  1. 亚马逊
  2. 泽润

另一个例如。PostgreSQL 数据库即服务。您可以在此处获取类似产品的列表。

有没有人详细了解这些 DbaaS 的性能、可靠性和可扩展性?阅读有关这些产品的文献会使它们听起来好得令人难以置信。我内心的愤世嫉俗感告诉我要质疑这些说法。

mysql postgresql performance scalability failover

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

Postgres PgAdmin III 查询生成器崩溃

我已经使用 Postgres 和 pgAdmin III 好几年了,但是今天早上我遇到了一个非常大的问题。我在 Windows Xp 操作系统上使用 pgAdmin III 9.0,在我的笔记本电脑 Dell Latitude E4300 上。

从今天早上开始,查询生成器(“SQL 编辑器”)选项停止工作。当我打开 pgAdmin 时,一切都很好并且可以正常工作,直到我单击 Sql Query Builder 按钮。当我这样做时,什么都没有出现并且 pgAdmin 崩溃而不提供任何信息。

我再次尝试卸载并安装 PgAdmin III 9.1,但 Sql Query Builder 一直无法正常工作。

我能做什么?

postgresql query pgadmin

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

删除的数据库仍然显示但导致错误 PostgreSQL

几周前我删除了一个数据库,但它仍然显示为\l. 我试过使用DROP DATABASE mixmobi_master;,第一次它给了我一条确认消息,但mixmobi_master仍然出现\l. 现在,当我再次尝试该命令时,我得到:

template1=# \l

template1=# drop database mixmobi_master;
ERROR:  database "mixmobi_master" does not exist

template1=# \l
                                 List of databases
      Name           | Owner | Encoding |   Collate   |    Ctype    | Access privileges 
-------------------------+-------+----------+-------------+-------------+-------------------
biterator_development   | kyle  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
mixmobi_master          | kyle  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
plantjotter_development | kyle  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
postgres                | atmos | UTF8     | en_US.UTF-8 …
Run Code Online (Sandbox Code Playgroud)

postgresql psql

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

跨越多个连续 psql 会话的单个事务

我在Ubuntu 10.04 Lucid Lynx上运行PostgreSQL 8.4数据库服务器和psql终端前端,并希望在多个连续的 psql 会话中跨越单个事务。

当我使用 psql 连接到我的数据库时,会建立一个新连接,并为此连接创建一个服务器后端进程。当我断开连接时,连接被释放并且后端进程终止。一个(非 XA*)事务被绑定到一个连接的范围内,所以显然没有直接的方法可以将单个事务跨越多个 psql 会话。

我想要实现的是以下命令序列可以在单个事务中运行,因此在每次调用时返回相同的事务时间戳now()

tscho@test:~$ sudo -u postgres psql -p 5433 --no-align --tuples-only -c "select now()"
2012-02-17 21:25:07.027056+01
tscho@test:~$ sudo -u postgres psql -p 5433 --no-align --tuples-only -c "select now()"
2012-02-17 21:25:09.487601+01
Run Code Online (Sandbox Code Playgroud)

数据库日志:

2012-02-17 21:25:07 CET 0- LOG:  connection received: host=[local]
2012-02-17 21:25:07 CET 0- LOG:  connection authorized: user=postgres database=postgres
2012-02-17 21:25:07 CET 0-2/0 LOG:  duration: 0.366 ms  statement: select now()
2012-02-17 21:25:07 …
Run Code Online (Sandbox Code Playgroud)

postgresql psql

5
推荐指数
2
解决办法
3578
查看次数