标签: postgresql

提高 PostgreSQL 中的排序性能?

我在 postgres-8.4 中有一个简单的博客数据库,它有两个表,articlescomments. 我有一个查询(由 Django 生成),想要获取类型为“NEWS”的最新文章并查找该文章的评论数量。它通过以下查询做到这一点:

SELECT "articles"."id", "articles"."datestamp", "articles"."title", "articles"."shorttitle", "articles"."description", "articles"."markdown", "articles"."body", "articles"."idxfti", "articles"."published", "articles"."type", COUNT("comments"."id") AS "comment__count"
FROM "articles"
LEFT OUTER JOIN "comments" ON ("articles"."id" = "comments"."article_id")
WHERE ("articles"."type"='NEWS')
GROUP BY "articles"."id", "articles"."datestamp", "articles"."title", "articles"."shorttitle", "articles"."description", "articles"."markdown", "articles"."body", "articles"."idxfti", "articles"."published", "articles"."type"
ORDER BY "articles"."datestamp" DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

这些表都不是特别大,但该查询需要 46 毫秒。执行计划是:

Limit  (cost=119.54..119.58 rows=1 width=1150) (actual time=46.479..46.481 rows=1 loops=1)
   ->  GroupAggregate  (cost=119.54..138.88 rows=455 width=1150) (actual time=46.475..46.475 rows=1 loops=1)
     ->  Sort  (cost=119.54..120.68 rows=455 width=1150) (actual …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index

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

PostgreSQL 中的流式复制

我正在尝试在一台机器上设置两台 PostgreSQL 服务器并执行流式复制。我已经成功过一次,但是当我按照完全相同的步骤再次尝试时它不起作用..这些是步骤:我有 $PGDATA = home/postgresql/9.1/data 和 $STANDBY = home/postgresql/9.1 /数据2

  1. 设置两个节点:
    initdb -D $PGDATA
    initdb -D $STANDBY
  2. 在主节点中创建一个用户进行复制。我在 pgAdmin 中这样做(它确实具有超级用户权限)
  3. 在 pg_hba.conf 中的主节点中添加允许备用连接的部分: host replication repuser 127.0.0.1/0 md5
  4. 在 postgresql.conf 中的 master 节点中设置:

    max_wal_senders = 1
    归档模式 = 开
    存档命令 = 'cp %p ~/postgresql/backup/archivedir/%f'
    wal_level = 存档
    wal_keep_segments = 32

  5. 启动主节点并做基础备份:

    psql -d dellstore2 -c "SELECT pg_start_backup('backup for replication', true)"
    rsync -av ${PGDATA}/ $STANDBY --exclude postmaster.pid
    psql -d dellstore2 -c "选择 pg_stop_backup()"
    
    pg_stop_backup 表示一切正常,所有 WAL 文件都已存档

  6. 在备用 (data2) 节点中,我使用以下命令创建 …

postgresql replication

7
推荐指数
1
解决办法
3636
查看次数

Postgres 主键以相反的顺序排序。它会有效地使用索引吗?

我的 Rails 数据库由 Postgres 数据库支持。您可能知道,Rails 中的每个表都分配了一个主键,该主键是 Integer 类型并已编入索引。

我的列表视图以相反的时间顺序显示记录。所以我只是按照主键的相反顺序对我的结果集进行排序。

我的问题是:查询会使用主键索引吗?如果是,那么那么有效吗?我如何验证?

在此先感谢您的时间。

巴拉特

postgresql index primary-key sorting

7
推荐指数
2
解决办法
7658
查看次数

将 float->numeric 转换从赋值更改为隐式的、危险的?

在将应用程序移植到 PostgreSQL (9.1) 时,我发现一个奇怪的 SQL 不兼容性与round()函数有关,特别是采用指示舍入精度的第二个参数的版本。

在 MySQL 中, round(some_float_column, 2)按预期工作,将some_float_column四舍五入的值返回到小数点后两位。在 Postgres 中,它错误ERROR: function round(double precision, integer) does not exist并建议HINT: No function matches the given name and argument types. You might need to add explicit type casts..

如文档所示... http://www.postgresql.org/docs/9.1/static/functions-math.html ...Postgres 有两个轮函数,round(value)它采用双精度数字,并round(value, precision)采用数字和一个整数。

所以,我不明白为什么 round 的两个参数形式不以 double 开头,但无论如何。在搜索中,我发现了这个问题的两种解决方案。一种是简单地创建我自己的版本round(value, precision),采用 (double, int) 并使用显式转换包装现有的 (numeric, int) 版本。这当然有效,但我不喜欢它(我的背景是 Oracle,它甚至没有真正的浮点类型)。在我看来,float/double 应该隐式转换为数字。事实证明,这些类型的 ASSIGNMENT 类型转换是预先定义的。但是 ASSIGNMENT 不适用于函数调用,正如我们在这里看到的,它需要是 IMPLICIT。与麻烦 …

postgresql best-practices datatypes cast

7
推荐指数
2
解决办法
2万
查看次数

连续归档:是否可以使用多台机器?

是否可以使用archive_command发送到多台机器?它是否像用 a 分隔一样简单,&&因为它本质上只是一个命令行?

command1 && command2
Run Code Online (Sandbox Code Playgroud)

我认为如果一个命令失败,这可能会产生不良影响,例如,如果command1失败则command2不会运行;如果command2失败,它会在整个过程中返回非零值,Postgres 会重新尝试发送 WAL,这意味着它会重新运行command1

我希望有一个更正式的解决方案来解决这个问题。我的目标是在数据中心内部备份一份,在数据中心外部备份一份。

postgresql

7
推荐指数
1
解决办法
1911
查看次数

为写入繁重的 PostgreSQL 数据库服务器选择什么 AWS 实例

我们现在在处理高峰时段服务器的密集流量时遇到问题;请参阅有关调整 DB 的相关问题。目前,我们正在使用较小的云服务作为服务器托管。目前,我们正在研究将我们的服务器迁移到 AWS 的可能性。我们遇到的问题主要与我们的数据库服务器有关,因此我们希望拥有比我们现在使用的要好得多的 AWS 实例。

数据库服务器所在云服务器的统计信息如下:

  • 8核
  • 16GB 内存
  • 100 GB,RAID-10 * SAS 15.000 RPM

在选择用于 PostgreSQL 数据库服务器的亚马逊实例时,您有什么特别需要考虑的吗?

postgresql aws

7
推荐指数
1
解决办法
3080
查看次数

为什么我的 Postgres 表会增长?

我有一张在 Postgres 9.1 下增长的表。这是一个包含大量插入和删除操作的高吞吐量表,但就数量或记录而言,它通常应保持在 1-2k 之间。自动吸尘已启用,我们已运行手动吸尘。我们已经检查过锁,但似乎没有。运行“真空详细”;说虽然有数百万条死记录,但“发现 0 个可移动”。

我可能没有想到什么?

postgresql

7
推荐指数
1
解决办法
1753
查看次数

使用 PgBouncer 与 HAProxy 的优势?

使用一个比另一个有什么优势吗?我只是在寻找从我的进程中隐藏主服务器和从服务器的实际 IP 地址的选项,如果主服务器出现故障,则不必重新启动它们。

如果 Nagios 检测到一个失败的 master,我仍然想参与到故障转移中来,包括告诉 HAproxy / PgBouncer 新的 master。

postgresql clustering

7
推荐指数
1
解决办法
4991
查看次数

在按另一个字段分组时,如何正确选择字符串的最大出现次数?

我正在使用 Postgresql 9.0。我在表中有以下字段:id, name.

 id    name 
 1     John
 1     Mary
 1     Mary
 1     Mary
 1     John
 1     Mary
 3     Paul
 3     Paul
 3     George
 .     .
 .     .
Run Code Online (Sandbox Code Playgroud)

对于每个id,我想选择出现次数最多的名称。我怎样才能做到这一点?

我尝试使用以下查询,但它不起作用:

select id, max(name) 
from table 
group by id;
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.0

7
推荐指数
1
解决办法
6613
查看次数

备份 PostgreSQL 数据库的样本

是否可以PostgreSQL仅使用一小部分数据(每个表中的 1000 行)来备份数据库?

我可以使用pg_dump. 在某些情况下,我需要具有最少数据的数据库。

pg_dump --host=localhost --port=5432 --username=postgres --password 
        --column-inserts --schema=test  testdb > test_backup.sql
Run Code Online (Sandbox Code Playgroud)

如何修改上述命令以备份 1000 条数据?

postgresql

7
推荐指数
2
解决办法
8813
查看次数