标签: postgresql

如何停止/禁用 PITR 并安全地清理 WAL 段?

我们的生产服务器在 CentOS 5.2 版(最终版)上运行 PostgreSQL v8.2.3。

我们已经在我们的生产服务器中设置了 PITR。由于某些原因,设置 PITR 后,我们无法对其进行管理和维护。最终,我们的 WAL 存档驱动器(辅助驱动器)已满(100% 使用),并且要存档的其他 WAL 存档段累积在 pg_xlog/ 目录本身(可在主驱动器中使用)

PITR 设置细节

有2个驱动器:

  1. 主驱动器(pgsql/data/目录所在)为 400 GB。
  2. 辅助驱动器(WAL 档案)为 300 GB。所有 WAL 存档都写入此辅助驱动器。

现在,我们决定停止/禁用 PITR。

我的问题是,在这种情况下,如何停止/禁用 PITR 并安全地清除两个驱动器中的所有 WAL 段?

推荐/建议的方法是什么?非常感谢专家对此的建议/想法/建议。

postgresql

10
推荐指数
1
解决办法
3904
查看次数

如何在不等待结果的情况下从 psql 执行查询?

我的查询(从现有表创建新表)需要很长时间。所以我在我的办公室建立了一个远程数据库——那里有更多的内存。

我可以像往常一样使用 psql 从家里连接到我的数据库。

如何告诉远程服务器从终端执行我的查询而不必等待响应?

(postgresql-9.2 , linux 环境)

编辑:我对其他解决方案持开放态度,没有必要使用 psql

postgresql psql

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

选择两个日期之间的 COUNT 天(周末除外)

我试图获得两个不同日期之间的天数,周末除外。

我不知道如何达到这个结果。

postgresql datetime

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

Postgres 正在执行顺序扫描而不是索引扫描

我有一个包含大约 1000 万行的表和一个日期字段的索引。当我尝试提取索引字段的唯一值时,即使结果集只有 26 个项目,Postgres 也会运行顺序扫描。为什么优化器会选择这个计划?我能做些什么来避免它?

从其他答案我怀疑这与查询和索引一样多。

explain select "labelDate" from pages group by "labelDate";
                              QUERY PLAN
-----------------------------------------------------------------------
 HashAggregate  (cost=524616.78..524617.04 rows=26 width=4)
   Group Key: "labelDate"
   ->  Seq Scan on pages  (cost=0.00..499082.42 rows=10213742 width=4)
(3 rows)
Run Code Online (Sandbox Code Playgroud)

表结构:

http=# \d pages
                                       Table "public.pages"
     Column      |          Type          |        Modifiers
-----------------+------------------------+----------------------------------
 pageid          | integer                | not null default nextval('...
 createDate      | integer                | not null
 archive         | character varying(16)  | not null
 label           | character varying(32)  | not null
 wptid           | character varying(64)  | …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index postgresql-9.4 query-performance

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

Psycopg2 究竟是什么?

这个问题是针对我正在为学校写的报告。从技术上讲,什么是 Psycopg2?在本教程中,他们将其称为“适配器”和“驱动程序”

Psycopg2 是一个积极开发的符合 DB API 2.0 的 PostgreSQL驱动程序。它是为多线程应用程序设计的,并管理自己的连接池。适配器的其他有趣功能是,如果您使用 PostgreSQL 数组数据类型,Psycopg 会自动将使用该数据类型的结果转换为 Python 列表。

既然它被import编入了 Python,我会认为它是一个库吗?

库、驱动程序和适配器之间有什么区别?

postgresql python

10
推荐指数
1
解决办法
4804
查看次数

修改 PostgreSQL 中的表约束

说我有一个约束

ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);
Run Code Online (Sandbox Code Playgroud)

需要修改,以便邮政编码长度为6.

我是否zipchk先删除约束然后重新创建它?

ALTER TABLE distributors DROP CONSTRAINT zipchk;
ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 6);
Run Code Online (Sandbox Code Playgroud)

或者是否有MODIFY(类似)命令:

ALTER TABLE distributors MODIFY CONSTRAINT zipchk CHECK (char_length(zipcode) = 6);
Run Code Online (Sandbox Code Playgroud)

postgresql constraint

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

索引是否通过 pg_restore 传输

我看到其他问题的答案是否定的(即索引不会随标准转移pg_restore)。但是,它看起来像在我最近的转储/恢复中一样,我不确定它是否真的转移了。

我将我的数据库从 PostgreSQL 9.3 迁移到 9.4.5 并使用转储/恢复来这样做。

下面是使用的命令:

sudo -u postgres pg_dump -h localhost -p 5432 -d nominatim -F d -f dump/postgres/backup -j 20
sudo -u postgres pg_restore --create --dbname=nominatim --exit-on-error -h localhost -p 5432 -F d -j 7 dump/postgres/backup
Run Code Online (Sandbox Code Playgroud)

转储和恢复成功(没有错误)。

我在进行恢复时将 autovacuum 设置为关闭,因此我analyze从 psql 中运行(无参数)并连接到已恢复的数据库。

我注意到的第一件事是,在 9.3 下,数据目录占用了大约 860GB,而在 9.4 下,它占用了大约 680GB。9.4 是不是更高效?

我注意到的第二件事是我看到了数据库中的索引:

nominatim=# \d country_name
                   Table "public.country_name"
            Column             |         Type         | Modifiers 
-------------------------------+---------------------------------    
country_code                  | character varying(2) |   
name                          | hstore               |   
country_default_language_code …
Run Code Online (Sandbox Code Playgroud)

postgresql index restore postgresql-9.4

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

“位图堆扫描”中的“堆块”是什么意思?

我有这个查询:

EXPLAIN (ANALYZE, BUFFERS) 
SELECT * FROM test
WHERE
    timestamp_range @> '2015-01-22 23:00:00'::timestamp
    AND data_int_array @> '{49, 61}'::integer[];
Run Code Online (Sandbox Code Playgroud)

哪些输出:

Bitmap Heap Scan on test  (cost=16.74..20.75 rows=1 width=113) (actual time=0.364..0.367 rows=2 loops=1)
  Recheck Cond: ((timestamp_range @> '2015-01-22 23:00:00'::timestamp without time zone) AND (data_int_array @> '{49,61}'::integer[]))
  Heap Blocks: exact=1
  Buffers: shared hit=8
  ->  BitmapAnd  (cost=16.74..16.74 rows=1 width=0) (actual time=0.351..0.351 rows=0 loops=1)
        Buffers: shared hit=7
        ->  Bitmap Index Scan on ix_test_interval  (cost=0.00..4.40 rows=17 width=0) (actual time=0.130..0.130 rows=12 loops=1)
              Index Cond: (timestamp_range @> '2015-01-22 …
Run Code Online (Sandbox Code Playgroud)

postgresql explain postgresql-9.4

10
推荐指数
1
解决办法
4657
查看次数

在 postgresql 中执行系统命令

我的要求是在触发器执行时执行像 (ls) 或 C 程序这样的系统命令。有没有办法创建一个触发函数来解决这个问题。

rdbms postgresql unix

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

保持 protobuf 规范与关系数据库(例如 PostgreSQL)同步的最佳实践

1.我们有一个 Google 的 Protocol Buffers 格式的模式定义,我们用它来为不同的 gRPC 实现(Python、PHP)生成代码

2.我们有一个数据库 (PostreSQL),它从映射 Protocol Buffers 结构的 SQL 文件初始化。

问题: protobuf 规范经常发生变化。这必须反映在数据库中,这是一项繁琐的任务,手动完成时容易出错。

我们最近转移到 Alembic 迁移,以便在我们更新协议缓冲区规范时将持续更新迁移到(实时)数据库结构。但是,我们仍然觉得我们需要维护两个基本相同或至少非常相似的结构:ProtoBuf 和 SQL-Code(通过 Alembic Migrations 或在纯 *.sql 文件中管理)。

我一遍又一遍地搜索,关于其他人如何解决这个问题的信息很少。理想情况下,我们希望建立一个 CI/CD 流程,将 protobuf 规范(例如,消息名称从 更改teaspoonknife)转换为 SQL 模式定义(例如CREATE TABLE teaspoon (...);)或从中创建 SQL 迁移代码(例如ALTER TABLE teaspoon RENAME TO knife;)。

我知道它实际上比我的简单示例更复杂,但我什至找不到支持半自动和人工监督转换的代码。有什么建议吗?

到目前为止我发现了什么:

  • 从 SQL 文件,我们可以创建一个 PostgreSQL 数据库(例如在 Docker 中)并使用sqlacodegen自动创建一个 SQLAlchemy 模型
  • 从 SQLAlchemy 模型,我们可以使用 Alembic 迁移来创建(半)自动模式迁移代码
  • 我们回到零点:我们需要维护基本的 SQL 文件和 protobuf 规范
  • 有 …

postgresql schema-migration

10
推荐指数
1
解决办法
1862
查看次数