如何解决错误:无法访问文件“pglogical”:没有这样的文件或目录

8

错误:

2019-06-17T05:00:11 [SOURCE_CAPTURE ]E: RetCode: SQL_ERROR SqlState: 58P01 NativeError: 1 Message: ERROR: could not access file "pglogical": No such file or directory;, Error while executing the query [1022502] (ar_odbc_stmt.c:2546)
2019-06-17T05:00:11 [SOURCE_CAPTURE ]E: RetCode: SQL_ERROR SqlState: 42P01 NativeError: 1 Message: ERROR: relation "pglogical.replication_set" does not exist;, No query has been executed with that handle [1022502] (ar_odbc_stmt.c:3722)

我们大约每隔3个月就会遇到这个错误。重新启动任务可以解决问题,但是恢复操作无法正常工作。

复制槽存在,但似乎处于不活跃状态:

   postgres=> select * from pg_replication_slots ;
                               slot_name                            |    plugin     | slot_type | datoid |   database    | active | active_pid | xmin | catalog_xmin | restart_lsn
    ----------------------------------------------------------------+---------------+-----------+--------+---------------+--------+------------+------+--------------+--------------
     juvmrynv47ajpwrc_00016389_f28d6802_db75_43d6_8058_315783e9b1b2 | test_decoding | logical   |  16389 | postgres | f      |            |      |    148271120 | 8DF/B292FB48
    (1 row)

我们正在面临相同的问题。你有任何解决方案吗?@vivekyad4v - prakharjain
我们得到了这两个: RetCode: SQL_ERROR SqlState: XX000 NativeError: 1 Message: ERROR: pglogical不在shared_preload_libraries中;执行查询时出错 [1022502] (ar_odbc_stmt.c:2581) RetCode: SQL_ERROR SqlState: 42P01 NativeError: 1 Message: ERROR: 关系“pglogical.replication_set”不存在;没有使用该句柄执行任何查询 [1022502] (ar_odbc_stmt.c:3752) - prakharjain
1
将您的参数组更改为支持逻辑复制,即设置“rds.logical_replication = 1”。 - vivekyad4v
检查答案。我已经添加了我的发现。 - vivekyad4v
1
我已经设置了rds.logical_replication=1,但是如错误信息所示,我现在正在将pglogical添加到shared_preload_libraries中。 - prakharjain
鉴于先前描述的设置,考虑在正在复制的数据库上运行 CREATE EXTENSION pglogical; 命令。您应该会注意到 pglogical 模式。有关详细信息请参见相关文章 - bvj
3个回答

3
在我们的情况下,活动事务导致了这个故障。因此,在DMS任务在故障或手动恢复后重新启动时,它将尝试创建一个虚拟的复制槽,该复制槽不需要源数据库中的活动事务。默认情况下,DMS将等待10分钟以完成活动事务,然后任务将失败并显示以下错误。
2019-09-02T06:48:10 [SOURCE_CAPTURE  ]E:  RetCode: SQL_ERROR  SqlState: 57014 NativeError: 1 Message: ERROR: canceling statement due to statement timeout;
Error while executing the query [1022502]  (ar_odbc_stmt.c:2581)

解决方案 -

  • Increase task settings TransactionConsistencyTimeout from 600 seconds to 1800 seconds.
  • Check if your replication instance is consuming too much memory.
  • Enable debug mode in your task settings & get more details about failure -

    "LogComponents": [
      {
        "Id": "SOURCE_UNLOAD",
        "Severity": "LOGGER_SEVERITY_DETAILED_DEBUG"
      },
      {
        "Id": "SOURCE_CAPTURE",
        "Severity": "LOGGER_SEVERITY_DETAILED_DEBUG"
      },
      {
        "Id": "TARGET_LOAD",
        "Severity": "LOGGER_SEVERITY_DETAILED_DEBUG"
      },
      {
        "Id": "TARGET_APPLY",
        "Severity": "LOGGER_SEVERITY_DETAILED_DEBUG"
      },
      {
        "Id": "TASK_MANAGER",
        "Severity": "LOGGER_SEVERITY_DETAILED_DEBUG"
      }
    ]
    

2
我遇到了与OP描述相同的错误。我的运行环境是: - 使用DMS版本3.1.4 - 使用Postgresql Aurora 10.7作为目标和源
后来,在检查设置文档时,我发现在https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html上,实际上对于Postgres版本大于10,我必须使用DMS 3.3.0及以上版本。
更改版本确实使其正常工作,所以请确保在此之前先查看Amazon的文档 :)

这对我来说是个诀窍。我避免使用3.3.0,因为它被标记为“beta”。谢谢! - New Alexandria

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接