Snowflake Connector for PostgreSQL 特征¶
版本支持¶
Snowflake Connector for PostgreSQL 支持任何官方支持的 PostgreSQL 版本。Snowflake 会随着客户迁移到较新版本而放弃对较旧版本的支持。Snowflake 在新版本发布时会宣布支持新版本。
虽然连接器支持许多 PostgreSQL 云版本,但有些版本需要额外设置。有关更多信息,请参阅 Snowflake Connector for PostgreSQL 数据源的先决条件。
以下是支持的 PostgresSQL 版本。
11 |
12 |
13 |
14 |
15 |
16 |
17 |
|
---|---|---|---|---|---|---|---|
Standard (https://www.postgresql.org/) |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
AWS RDS (https://docs.aws.amazon.com/AmazonRDS/latest/PostgreSQLReleaseNotes/Welcome.html) |
是 |
是 |
是 |
是 |
是 |
是 |
是 |
Amazon Aurora (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraPostgreSQLReleaseNotes/Welcome.html) |
是 |
是 |
是 |
是 |
是 |
是 |
|
GCP Cloud SQL (https://cloud.google.com/sql/docs/postgres/) |
是 |
是 |
是 |
是 |
是 |
是 |
|
Azure Database (https://learn.microsoft.com/en-us/azure/postgresql/) |
是 |
是 |
是 |
是 |
是 |
是 |
服务器设置¶
根据需要查看并调整 PostgreSQL 服务器上的以下设置:
|
设置为 连接器依靠主键将变更合并到目标表中。以下设置可确保 Write-Ahead Log (WAL) 记录包括主键信息: |
|
为数据库代理中此数据库的每个数据源配置条目增加 1。 |
|
为数据库代理中此数据库的每个数据源配置条目增加 1。 |
|
为数据库代理中此数据库的每个数据源配置条目增加 1。 |
发布¶
连接器需要 PostgreSQL 发布 (https://www.postgresql.org/docs/current/logical-replication-publication.html) 来访问表以进行复制。
数据库代理只支持每个数据源一项发布。如果需要在单个 PostgreSQL 服务器中使用多项发布,则可以将该服务器多次配置为单独的数据源,每个数据源都有自己的发布。
发布应包括对数据所做的所有变更,包括
INSERT
、UPDATE
、DELETE
和TRUNCATE
。可以为
ALL TABLES
或表的子集设置发布,但为了获得最佳性能,请仅添加那些应复制的表。连接器将只接收来自发布中包含的表的变更。可以将表及其所有列或列的子集添加到发布中。使用列的子集进行添加时,请使用 ADD_TABLE_WITH_COLUMNS 过程。
警告
将表添加到具有列子集的发布中,然后使用 ADD_TABLES 过程启用以用于复制时,发布中缺少的列将在目标表中标记为已删除。以后向发布添加任何其他列都将导致表被标记为永久失败。
有关发布配置的更多信息,请参阅 配置发布。
复制槽¶
为了复制数据和架构变更,连接器会创建一个 复制槽 (https://www.postgresql.org/docs/current/logicaldecoding-explanation.html#LOGICALDECODING-REPLICATION-SLOTS)。将给定数据源中的第一个表添加到复制时,将创建槽,并将其用于该数据源中的所有表。
槽的名称结构为 sf_db_conn_rs_kbmd_<data-source-name>
,其中 <data-source-name>
是数据库代理配置中数据源的标识符。
如果将数据库代理配置为多次连接到同一数据库,则通过添加多个数据源,连接器将创建 多个 复制槽。
如果将多个数据库代理配置为连接到同一 PostgreSQL 服务器,则必须为每个数据库代理提供唯一的数据源名称。
小心
数据库代理 不会删除 未使用的复制槽。如果您断开数据库代理与 PostgreSQL 实例的连接,或者从复制中移除其所有表,那么您还 必须 手动删除复制槽,以防止它阻碍 WAL 修剪。
WAL 增长和复制槽位置¶
复制槽创建后,将导致 PostgreSQL 从复制槽所保留的位置保留 WAL 数据,直到连接器确认并推进该位置。连接器在记录存储在其日志表中之后定期确认位置,即使这些记录尚未合并到目标表中。
在 连续模式 下,连接器每分钟确认一次位置。
在 计划模式 下,连接器根据配置的计划确认位置。请记住,更长的计划 将导致 WAL 更大。
必须确保 PostgreSQL 服务器上有足够的磁盘空间用于 WAL。如果您检测到 WAL 持续增长,请检查以下内容:
数据库代理是否已连接,并且连接器是否正在主动复制数据?如果不是,则表示复制槽没有推进,并阻止 WAL 修剪。
复制是否与复制表中的数据变更保持同步?如果不是,则意味着源中的数据变更与其在 Snowflake 目标表中的出现时间之间的延迟持续增长,复制槽推进得太慢。您需要从复制中移除一些表,或者增加计算仓库的大小。
如果由于复制槽未推进而导致增长,则 PostgreSQL 中的 max_wal_size
设置对 WAL 增长没有影响。
小技巧
在紧急情况下,您可以手动删除连接器使用的复制槽。这将中断连接器中运行的任何复制,但允许 PostgreSQL 修剪 WAL 和回收磁盘空间。
主键和表副本标识¶
连接器依靠主键将变更合并到目标表中。因此:
为复制启用的每个表都必须有一个主键。键可以是单个列或组合。
表也必须将其 REPLICA IDENTITY (https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-REPLICA-IDENTITY) 设置为
DEFAULT
。这确保了主键在 WAL 中表示,并且连接器可以读取它们。
代理身份验证¶
当前唯一支持的身份验证方法是用户名和密码。数据库代理配置中的每个数据源条目都包括自己的凭据集,这些凭据在数据源之间可能会有所不同。
数据库代理的用户必须具有带 REPLICATION
属性的角色,或者如果不能应用前者,则为 SUPERUSER
。
有关如何为数据库代理创建用户的说明,请参阅 创建所需的用户。
有关保护数据库代理访问源数据库的更多信息,请参阅 PostgreSQL 文档 (https://www.postgresql.org/docs/current/logical-replication-security.html)。