AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-5783

Zac B's questions

Martin Hope
Zac B
Asked: 2012-12-07 10:36:14 +0800 CST

为什么/如何从“没有时区的时间戳”字段中提取(epoch...)的行为在 PostgreSQL 8.4 和 9.2 之间发生变化?

  • 7

语境:

我们目前在生产中运行 PostgreSQL 8.4,并且正在内部测试 9.2 以备将来升级。关于日期出现了一些问题。除了 PostgreSQL 版本和配置之外,运行 8.4 和 9.2 的服务器在其他方面都是相同的。完全相同的数据存储在两组服务器上;它使用pg_dump和传输pg_restore。

在我们数据库的一部分中,我们将日期存储在一个类型为 的字段中timestamp without time zone。

问题:

从该字段访问日期时,extract(epoch..)请求会根据 Postgres 版本返回非常不同的结果,如下所示:

#On Postgres 8.4. entered_timestamp is a "timestamp without time zone" type column:
SELECT entered_timestamp, extract(epoch from entered_timestamp) AS entered_timestamp from <table row>

 entered_timestamp      | entered_timestamp
 ----------------------------+-------------------
 2012-11-01 06:01:39.699612 |  1351774899.69961

但...

#On Postgres 9.2. All tables, schema, and data are identical, the SELECT statement is identical to the previous one:
SELECT entered_timestamp, extract(epoch from entered_timestamp) AS entered_timestamp from <table row>

 entered_timestamp      | entered_timestamp
 ----------------------------+-------------------
 2012-11-01 06:01:39.699612 |  1351749699.69961

如您所见,返回的时间戳是相同的,但返回的纪元数不同;事实上,他们已经离开了几个小时。两台服务器上的服务器日期和 Linux 时区相同(彼此相差一秒)。Postgres 时区也相同:SELECT current_setting('timezone')在两台服务器上运行也返回相同的数据。在两台服务器上运行SELECT now()会返回几乎相同的值。

问题:

  1. 在 PostgreSQL 8.4 和 PostgreSQL 9.2 之间, extract(epoch...)on 类型字段 的行为有何变化?timestamp without time zone

  2. 为什么会发生这种变化?

  3. 有没有办法在不改变我的模式或改变过去的数据(即基于配置的修复)的情况下防止这种变化?

postgresql timezone
  • 1 个回答
  • 4811 Views
Martin Hope
Zac B
Asked: 2012-07-04 13:01:45 +0800 CST

为什么我的 postmaster 进程(有时)在 WAL 基础恢复后变得无法管理?

  • 3

TL;DR:在从 WAL 基础备份恢复其数据目录后立即启动 Postgres 时,会生成不可停止、无法使用的 postmaster。为什么?

语境:

我们使用 PGDG 包在 CentOS 6 上运行 postgresql 8.4。我们有一个用于开发人员测试环境的脚本,用于恢复生产服务器数据目录的夜间备份(在调用pg_start_backup和之间创建pg_stop_backup)。该脚本解压缩文件,并用于restore_command重新应用在生产中进行备份期间生成的任何 WAL。

它通常工作正常,并且恢复速度比基于 SQL 的pg_dump'ed 文件恢复快数百倍。

问题:

有时,在解压数据目录后,脚本会通过运行启动 postgres /etc/init.d/postgresql start(这是指向 . 的符号链接/etc/init.d/postgresql-8.4。这使它成为我们最终升级到 9.* 时可预测的初始化脚本)。它报告“OK”,如:它正确启动。然后 WAL 不会恢复;它无限期地挂起等待recovery.done文件出现。

我试过的:

当我/etc/init.d/postgresql status在无限期挂起期间运行时,初始化脚本报告dead but pid file exists.

然后我跑了ps -ef | grep post。奇怪的是,postmaster 进程和归档器等正在运行。所有调用参数都是正确的(正确的 datadir 等)。

当我运行psql时,它检测到一个正在运行的 postmaster 和一个初始化的postgres数据库,但没有检测到主数据库——我们关心通过 WAL 脚本恢复的那个。

然后我检查了数据目录上的权限,一切看起来都很好。

运行/etc/init.d/postgresql stop报告“OK”,并终止归档程序/观察程序进程,但 postmaster 保持运行。

我尝试时也发生了同样的事情killall -r '*.postmaster*.'。

唯一可以恢复卡住的 WAL 恢复的是killall -s 3 -r '.*postmaster.*'(信号 3 是 SIGQUIT),然后是/etc/init.d/postgresql start.

我在无法管理的状态下检查pg_startup.log了每日文件pg_log,一切看起来都很好。pg_startup.log将成功启动注册为最后一个条目。

可能的原因:

关于我们的配置,有一些(我认为是次要的)事情是非标准的。

  • 正如我之前所说,我们的 init 脚本符号链接到一个与版本无关的脚本,位于/etc/init.d/postgresql. 这指向我们想要的任何地方。目前它指向/etc/init.d/postgresql-8.4.

  • 我们的postgresql.conf文件位于/etc/(具有 postmaster 用户的所有者和组),并具有指向数据目录的符号链接。我们的 WAL 恢复脚本确保在尝试启动 postgres 之前重新创建符号链接。

  • 我们最近将基础架构从 Postgresql 8.4.11 升级到了 8.4.12。我们正在测试新版本的稳定性。我们的生产服务器正在运行 8.4.11。但是,我们通过 将数据从它们中提取出来,对其进行pg_dump清理,然后将其“打包”以在其他地方(在 8.4.12 上)进行 WAL 恢复,因此我们不会跨不兼容的 Postgres 版本恢复 WAL。

问题:

为什么要这样做?下面列出的可能原因之一可能是罪魁祸首吗?

postgresql backup
  • 1 个回答
  • 3478 Views
Martin Hope
Zac B
Asked: 2012-06-07 05:23:28 +0800 CST

Slony 初始订阅导致内存不足内核恐慌。为什么?

  • 1

语境:

我们在两台 CentOS 6 服务器上运行 Slony 2.0 和 Postgres 8.4——一台主服务器,一台从服务器。我们的数据库大小约为 30GB,这并不罕见,但我们确实有几个表,每个表都超过 5GB。

最近,我们需要重新构建我们的 Slony 集群。我关闭了 Slony,在主从服务器上恢复了相同的数据库快照,设置了我的 slony.conf 和 slon_tools.conf,启动了 slons,运行slonik_init_cluster | slonik,然后slonik_create_set 1 | slonik(我们只有一个复制集),最后slonik_subscribe_set 1 2 | slonik. 一切看起来都很好,我能够在日志中看到订阅进度。

然后服务器停止响应。我重新启动它,并看到“内核恐慌 - 不同步:内存不足,没有可终止的进程”,它已经杀死了所有它能杀死的东西。

我试过的:

首先,我完全炸毁了数据库,重新运行initdb,然后再次恢复相同的快照。同样的内核恐慌。然后我把它吹走了,卸载了 Postgres 和 Slony,然后重新安装了它们。我仔细检查了 postgresql.conf 中所有基于内存的设置,它们都处于库存/推荐水平(即shared_buffersRAM 的 1/4 等)。VACUUM ANALYZE FULL在初始化 Slony 集群之前,我在数据库上运行了一个。每次都出现相同的结果:内核恐慌,内存不足。

随机/手动配置更改不可能导致这种情况:我们所有的 Postgres 和 Slony 配置都由Puppet管理,并且几个月没有更改。

问题:

为什么会这样?

我们的数据库在过去几个月里呈线性增长(年初约为 23GB,现在是 30GB),每隔一段时间我不得不在这些相同的服务器上重新初始化 Slony 集群,它一直有效美好的。

postgresql replication
  • 1 个回答
  • 473 Views
Martin Hope
Zac B
Asked: 2012-04-11 14:09:06 +0800 CST

我可以用 Slony 复制视图吗?

  • 2

我可以向 Slony 提供一些创建视图的 SQL 吗?

我有一些执行此类操作的 SQL CREATE OR REPLACE VIEW name_of_view,将其传递给slonik_execute_script,然后尝试运行slonik_create_set仅包含该视图的临时 Slony 集。

我被ERROR: Slony-I: table "public"."name_of_view" has no primary key错误地拒绝了。据我所知,视图不支持主键。

这是否意味着无法使用 Slony 管理脚本向复制添加视图,而我应该只在复制集群的所有成员上手动安装它?

postgresql replication
  • 2 个回答
  • 623 Views
Martin Hope
Zac B
Asked: 2012-03-13 13:24:28 +0800 CST

PostgreSQL WAL 归档:将 archive_mode 设置为“on”而不复制日志会导致性能问题吗?

  • 3

使用 PostgreSQL 8.4/CentOS 6:如果我将archive_mode参数设置为onin postgresql.conf,但实际上并没有通过archive_command参数将生成的 WAL 文件存储在任何地方,是否会对性能产生影响?

这是为了测试在高吞吐量生产服务器上使用 WAL 归档的潜力:我希望设置archive_mode为on,并设置archive_command为类似

echo `date` %f %p >> archive_log.txt

这样我就可以监控在给定时间段内将创建多少 WAL 文件,而无需实际复制它们并冒磁盘空间溢出的风险。这会以任何方式影响我的服务器的性能吗?

postgresql performance
  • 1 个回答
  • 1557 Views
Martin Hope
Zac B
Asked: 2012-01-12 07:47:34 +0800 CST

PostgreSQL 9.1 Streaming Replication 在没有 WAL 归档的情况下是否能赶上?

  • 17

语境:

假设在 Postgres 9.1 集群上使用 Streaming Replication/Hot Standby 时,备用节点出现故障。它停留了一天,在此期间,主服务器上发生了很多 DML。备用数据库的 recovery.conf 不包含“restore_command”条目(用于从 WAL 日志文件恢复),但包含“primary_conninfo”字符串(用于流式复制)。

问题:

如果我在主服务器上更改一天后再次启动备用服务器。它会仅使用流式复制“赶上”(最终进入反映主控的状态)吗?或者我是否必须启用 WAL 文件存档并让它应用在中断期间存档的文件以确保货币?

我在这里检查了 WAL 归档/流式复制文档,它说您不必同时启用 WAL 归档和流式复制,但尚不清楚在没有启用 WAL 文件归档的情况下是否会发生追赶。

谢谢!

postgresql replication
  • 3 个回答
  • 4809 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve