Oracle GoldenGate for PostgreSQL 支持哪些功能?

John Doe 四月 30, 2024

摘要:本文介绍 Oracle GoldenGate for PostgreSQL 支持哪些数据类型、对象和操作。

目录

对于受支持的 PostgreSQL 数据库版本,Oracle GoldenGate for PostgreSQL 支持初始加载和事务数据的捕获和传递。

Oracle GoldenGate for PostgreSQL 支持对源端数据进行映射、筛选和转换(除非本文档另有说明),以及将从 Oracle GoldenGate 支持的其他源数据库产生的数据复制到 PostgreSQL 数据库中。

支持的数据库

以下是 Oracle GoldenGate for PostgreSQL 支持的数据库和限制:

  • 仅支持对用户数据库进行捕获和传递。
  • Oracle GoldenGate 不支持从归档日志中捕获。
  • 不支持对副本/备用数据库进行捕获和传递。
  • 高可用性:
    • 在使用 PostgreSQL 高可用配置的环境中,Oracle GoldenGate 提取时不支持从主数据库无缝切换到一个辅助数据库。但是,可以采用手动程序操作,以提供从新主进行提取的连续性。
    • 有关详细信息,请参阅 Oracle 支持说明 Oracle GoldenGate Procedures for PostgreSQL HA Failover (Doc ID 2818379.1) 中提供的详细信息。

支持的 PostgreSQL 数据类型

下面列出了 Oracle GoldenGate 支持的 PostgreSQL 数据类型,以及此支持的限制。

  • bigint
  • bigserial
  • bit(n)
  • bit varying(n)
  • boolean
  • bytea
  • char (n)
  • cidr
  • citext
  • date
  • decimal
  • double precision
  • inet
  • integer
  • interval
  • json
  • jsonb
  • macaddr
  • macaddr8
  • money
  • numeric
  • real
  • serial
  • smallint
  • smallserial
  • text
  • time with/without timezone
  • timestamp with/without timezone
  • uuid
  • varchar(n)
  • varbit
  • xml

支持的限制

  • 如果数据类型为charvarchartextbytea的列是主键或唯一键的一部分,则这些列的最大单个长度不得超过 8191 字节。

  • 作为主键一部分的数据类型为CITEXT的列,最多支持 8000 字节的大小。不支持大于 8000 字节且属于主键的CITEXT列。

  • 不支持realdoublenumericdecimal: NaN输入值。

  • 以下限制适用于bit/varbit数据类型:

    • 它们的支持长度可达 4k。对于大于 4k 的长度,数据被截断,并且仅捕获较低的 4k 位。
    • 源端为 bit(n) 的列只能应用成非 PostgreSQL 目标库上的字符类型列,但是可以应用成 PostgreSQL 目标库上的char类型或bit/varbit列。
  • 以下限制适用于带时区的timestamp和不带时区的timestamp

    • 不支持数据中带有 BC 或 AD 标签的timestamp数据。
    • 不支持早于 1883-11-18 12:00:00 的timestamp数据。
    • 不支持 YEAR 部分超过 4 位的timestamp数据。
    • 不支持timestamp列的Infinity/-Infinity输入字符串。
  • 以下是使用interval时的限制:

    • 不支持从interval类型的列捕获混合符号的interval数据。您可以在提取参数文件中使用DBOPTIONS ALLOWNONSTANDARDINTERVALDATA,将混合符号的interval数据(或 Oracle GoldenGate 不支持的任何其他格式的interval数据)捕获为字符串(而不是标准的interval数据)。

      以下是使用提取参数文件中的DBOPTIONS ALLOWNONSTANDARDINTERVALDATA,写入跟踪文件的数据的几个示例:

    • +1026-9 +0 +0:0:22.000000 被解释为 1026 年 9 个月 0 天 0 小时 0 分钟 22 秒。

    • -0-0 -0 -8 被解释为 0 年、0 个月、0 天、-8 小时。

    • +1-3 +0 +3:20 被解释为 1 年 3 个月 0 天 3 小时 20 分钟。

  • 复制:如果源端 interval 数据是使用DBOPTIONS ALLOWNONSTANDARDINTERVALDATA捕获的,并以字符串写入到跟踪文件中,则允许将相应的源端列映射到目标库上的一个charbinary类型列。

  • date的限制:

    • 不支持数据中带有 BC 或 AD 标签的date数据。
    • 不支持date列的Infinity/-Infinity输入字符串。
  • 类型为textjsonxmlbyteachar (>8191)varchar (>8191)的列会被视为 LOB 列,并具有以下限制:

    • 当使用GETUPDATEBEFORES时,LOB 列的前映像永远不会被记录。
    • 当使用NOCOMPRESSUPDATES时,LOB列只有在它们被修改时才会记录在后映像中。
  • 浮点数的范围和精度支持依赖于主机。通常,精度会精确到 16 位有效数字,但应查看数据库文档,以确定预期的近似值。Oracle GoldenGate 对超出支持精度的值会进行舍入或截断。

不支持的 PostgreSQL 数据类型

Oracle GoldenGate for PostgreSQL 不支持以下数据类型:

  • Arrays
  • box
  • circle
  • Composite Types
  • Domain Types
  • Enumerated Types
  • line
  • lseq
  • Object Identifiers Types
  • path
  • pg_lsn
  • pg_snapshot
  • point
  • polygon
  • Pseudo-Types
  • Range Types
  • tsquery
  • tsvector
  • User-defined Types (UDTs)
  • 扩展和额外提供的模块请参考:额外提供的模块

注意: 如果提取参数文件包含一个带有不支持的数据类型的表,则提取会停止并显示错误消息。若要恢复复制,请从提取文件中删除该表,或从带有不支持的数据类型的表中删除相应的列。

注意:如果支持一个扩展或额外提供的模块,则该模块会被显式添加到 “支持的 PostgreSQL 数据类型” 列表中。

支持的 PostgreSQL 对象和操作

  • Oracle GoldenGate for PostgreSQL 仅支持 DML 操作(插入/更新/删除)。不支持 DDL 复制。

  • 从 PostgreSQL 11 及更高版本开始,Oracle GoldenGate for PostgreSQL 支持截断操作的复制,并且需要在提取和复制中使用GETTRUNCATES参数。

  • 名称区分和不区分大小写的用法:

    • 不带引号的名称不区分大小写,并且隐式采用小写。例如,CREATE TABLE MixedCaseTableSELECT * FROM mixedcasetable是等价的。

    • 用引号引用的表名和列名区分大小写,需要在提取和复制中以及使用 Oracle GoldenGate 命令时正确列出。

      例如,需要使用TABLE appschema."MixedCaseTable"ADD TRANDATA appschema."MixedCaseTable",来支持区分大小写的表名。

表和视图

要包含表进行捕获和传递,必须满足以下要求,并且必须只能包含 “支持的 PostgreSQL 数据类型” 中列出的数据类型。

  • Oracle GoldenGate for PostgreSQL 支持从用户表捕获事务型 DML 操作,并传递到用户表。
  • Oracle GoldenGate for PostgreSQL 支持传递到分区表。
  • 对象名称(表/模式/数据库/列名)和列数据支持国际化语言。

限制:

  • Oracle GoldenGate for PostgreSQL 不支持视图的捕获和传递。
  • Oracle GoldenGate for PostgreSQL 不支持分区表的捕获。

序列和标识列

  • 对于单向、双向和多向的实现,源端表和目标表都支持序列。

  • 对于单向、双向和多向的实现,源端表和目标表都支持使用GENERATED BY DEFAULT AS IDENTITY子句创建的标识列。

  • 使用GENERATED ALWAYS AS IDENTITY子句创建的标识列,在目标数据库表中不受支持,应从目标表中删除标识属性,或将其更改为GENERATED BY DEFAULT AS IDENTITY

  • 对于双向和多向的实现,使用等于配置的服务器数量的INCREMENT BY值,定义标识列和序列,每个服务器使用不同的MINVALUE值。

    例如,双向的两个数据库配置的MINVALUE/INCREMENT BY值如下所示:

    数据库 1,将MINVALUE设置为 1,INCREMENT BY设置为 2。

    数据库 2,将MINVALUE设置为 2,INCREMENT BY设置为 2。

    例如,多向的三数据库配置的MINVALUE/INCREMENT BY值如下所示:

    数据库 1,将MINVALUE设置为 1,INCREMENT BY设置为 3。

    数据库 2,将MINVALUE设置为 2,INCREMENT BY设置为 3。

    数据库 3,将MINVALUE设置为 3,INCREMENT BY设置为 3。