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-223196

Anthony O's questions

Martin Hope
Anthony O
Asked: 2024-05-02 12:05:42 +0800 CST

如何针对未注册的记录评估字符串格式的列条件?

  • 6
DO $$
DECLARE
    rec RECORD;
    outcome BOOLEAN;
    rule TEXT;
BEGIN
    -- Assume the record references a single row that contains the columns under test in the rule
    rule := 'columnA > 30 OR columnB < 50';
END;
$$
 LANGUAGE plpgsql;

这是一个简洁的块,其中包含我想根据记录评估的规则的示例。我想我需要EXECUTE一个动态 SQL 语句。

我想在运行时动态确定记录的类型,因为我可以轻松访问带有表名称的另一个字符串。我设想铸造到table_name%ROWTYPE. 据我所知,我无法在运行时将 RE​​CORD 动态转换为复合类型。

然后我想到使用row_to_json(rec),但随后需要针对这个 JSON 对象评估规则。我不熟悉如何在 PL/pgSQL 中执行此操作。

我从 CURSOR 获取到 RECORD 中,因为我想要一个可以传递给没有临时表开销的不同函数的迭代器。我对 PL/pgSQL 相当陌生,我想说该语言只了解了几千个 LOC,所以我仍在学习如何使用它的控制结构。我正在考虑我可能需要备份一下并为问题选择不同的控制和/或数据结构。您将如何解决这个问题?

postgresql
  • 1 个回答
  • 24 Views
Martin Hope
Anthony O
Asked: 2024-02-29 09:04:43 +0800 CST

当我进行故障回复并要求将旧主数据库提升回其主要状态时,如何才能最大程度地减少数据丢失和数据传输?

  • 5

根据 IBM 文档,故障恢复的定义是“在灾难或计划维护期后将生产返回到原始位置的过程”。

根据我对 postgresql 社区帖子的阅读,在故障转移后将旧的主服务器重新联机作为新主服务器之后的备用服务器也可能被视为故障转移。

这可能是因为人们普遍认为拥有相同的数据库服务器是最佳实践。但是,这个选项对我来说不可用。

我有 2 台服务器:Costanza 和 Kramer。Costanza 是一个高性能服务器。克莱默不是。

这是我正在尝试逐步优化的场景:

  1. Costanza 处于不可恢复的故障模式(典型)
  2. 克莱默升入小学
  3. Costanza 再次可用且 PGDATA 完好无损
  4. 同步 Costanza 和 Kramer,这样写入 Kramer 的数据就不会丢失
  5. 将科斯坦萨提升为主要地位
  6. 建立克莱默作为备用

我专注于步骤 4 和 5。

当运行 pg_rewind 重放 WAL 文件时,似乎“在最新公共检查点之后源服务器上发生的修改被忽略 - 当目标服务器成为源服务器的备用服务器时,这些修改无论如何都会被恢复。” --看到这个SO问题

我由此推断,简单地运行 pg_rewind 不会同步 Costanza 和 Kramer(步骤 4),因为对 Kramer 的写入可能发生在最后一个公共检查点之后。这也是我们在进行故障恢复时观察到的情况。

我对第 4 步的解决方案是:

4a. 运行 pg_rewind 来同步不同的时间线

4b. 将 Costanza 建立为 Kramer 的备用数据库,并允许其赶上复制延迟(假设检查点后存在 WAL)

然后

  1. 关闭克莱默并将科斯坦萨提升为初选(再次导致时间线分歧)

6a. 以 Kramer 作为目标运行 pg_rewind

6b. 将 Kramer 建立为 Costanza 的备用数据库,并允许其赶上复制延迟(再次假设检查点后存在 WAL)

这是一种罕见的情况。但我不知道我会遇到什么故障模式以及 PGDATA 是否完好无损。

这是一个非常大的数据库,我希望尽可能避免通过基础备份移动数据。

这种方法对我来说似乎效率低下,因为我必须运行 pg_rewind 两次,并且我必须将 Costanza 建立为备用数据库,以便应用 Kramer 发布公共检查点时发生的修改。

我必须最大限度地减少数据丢失,而该解决方案似乎可以通过最少的数据传输来做到这一点。

(旁白:我是否应该关心额外的时间线创建?这似乎是不可避免的,并且它发生在将数据库升级为主数据库时)

有没有办法将克莱默后公共检查站的修改应用到科斯坦萨,而不将科斯坦萨建立为克莱默的备用?

是否存在达到同等结果的更短路径?或者,在数据库故障场景中,是否存在您认为“更容易”遵循的路径?

postgresql
  • 1 个回答
  • 13 Views
Martin Hope
Anthony O
Asked: 2023-05-26 03:08:57 +0800 CST

使用 CTE 时,为什么需要使用 SELECT 两次才能过滤辅助语句中的值?

  • 5
  WITH aux_results AS (
    SELECT id
    FROM vendors
  )
  SELECT c.id
  FROM customers AS c
  WHERE c.vendor IN (SELECT * FROM aux_results);

这是一个简单而简单的 CTE 示例。辅助语句使用 SELECT 来检索 id。要过滤它们,我必须使用 SELECT ,否则会引发异常。

为什么会这样,为什么它与使用子查询进行相同的整体查询的模式不同?

看:

https://www.postgresql.org/docs/current/functions-subquery.html#FUNCTIONS-SUBQUERY-IN

看起来子查询返回的对象与 CTE 辅助语句返回的对象不同。查询的方式不同,因此外部接口不同,但它们都可以被视为瞬态表。

顺便说一句,性能是否受到影响?(怀疑)我应该只使用子查询吗?(对此感到怀疑)

postgresql
  • 1 个回答
  • 56 Views
Martin Hope
Anthony O
Asked: 2022-04-20 15:32:51 +0800 CST

如何在没有自动增量 ID 冲突的情况下在 2 个 PostgreSQL 集群之间迁移数据?

  • 0

我有 2 个独立运行的数据库集群。将来,我可能需要将客户的记录从集群 1 移动到集群 2。我有一个 bash 脚本,我在服务器端将表记录从集群 1 复制到 CSV 文件,然后将它们恢复到集群 2。

数据之间的关联使用顺序 ID。这些 ID 在两个实例中不是唯一的。似乎有两种可能:

  1. 我没有为我的用例使用最好的工具。还有其他工具可以让我更轻松地做到这一点。我已经掩盖了外国数据包装器。我不想做转储,因为我只需要一些记录。

  2. 我只需要吸收它并使用在我的数据集中唯一的 UUID。

postgresql migration
  • 2 个回答
  • 70 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