由 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 timezonetimestamp
with/without timezoneuuid
varchar(n)
varbit
xml
支持的限制
-
如果数据类型为
char
、varchar
、text
或bytea
的列是主键或唯一键的一部分,则这些列的最大单个长度不得超过 8191 字节。 -
作为主键一部分的数据类型为
CITEXT
的列,最多支持 8000 字节的大小。不支持大于 8000 字节且属于主键的CITEXT
列。 -
不支持
real
、double
、numeric
、decimal: 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
输入字符串。
- 不支持数据中带有 BC 或 AD 标签的
-
以下是使用
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
捕获的,并以字符串写入到跟踪文件中,则允许将相应的源端列映射到目标库上的一个char
或binary
类型列。 -
date
的限制:- 不支持数据中带有 BC 或 AD 标签的
date
数据。 - 不支持
date
列的Infinity
/-Infinity
输入字符串。
- 不支持数据中带有 BC 或 AD 标签的
-
类型为
text
、json
、xml
、bytea
、char (>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 MixedCaseTable
和SELECT * 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。