迁徙其他数据库到 PostgreSQL 剧烈介绍这个工具!

引见

db_migrator是一个 PostgreSQL裁减,提供将数据库从其他数据源迁徙到 PostgreSQL 的性能。这须要有一个要迁徙的数据源的外部数据包装器。

您还须要有一个给db_migrator用的插件,其中蕴含特定于指标数据源的代码。目前,以下数据源都是有插件的:

请参阅架构局部,以便了解正在出现的状况,请参阅用法,了解如何以最佳方式迁徙数据库。

展现

这是经常使用ora_migrator插件,繁难迁徙一个 Oracle 数据库的完整示例。

经常使用超级用户设置阶段:

 EXTENSION oracle_fdw SERVER oracle   WRAPPER oracle_fdwOPTIONS dbserver     SERVER oracle  migrator  MAPPING  migrator SERVER oracleOPTIONS   password 

PostgreSQL 用户migrator具有创立 PostgreSQL 形式的权限,而 Oracle 用户orauser具有SELECT ANY DICTIONARY权限。

如今,咱们以migrator衔接并口头迁徙,以让一切对象都属于此用户:

 EXTENSION ora_migrator db_migrateplugin  server  only_schemas  NOTICE:Creating staging schemas    NOTICE:Creating  metadata views    NOTICE:Creating schemas NOTICE:Creating sequences NOTICE:Creating   NOTICE:Migrating  testschema1baddata WARNING:Error loading    testschema1baddataDETAIL:invalid byte sequence  encoding : :NOTICE:Migrating  testschema1log NOTICE:Migrating  testschema1tab1 NOTICE:Migrating  testschema1tab2 NOTICE:Migrating  testschema2tab3 NOTICE:Creating     constraints WARNING:Error creating        testschema1baddataDETAIL:relation  does  exist:NOTICE:Creating   constraints NOTICE:Creating  constraints NOTICE:Creating indexes NOTICE:Setting    NOTICE:Dropping staging schemas NOTICE:Migration completed    db_migrate 

虽然由于 Oracle 数据库中有失误数据,其中一个表的迁徙失败了,但其他数据都已成功迁徙。

设置

前提条件

外部数据包装器

您须要为要迁徙的数据源,装置外部数据包装器。请依照该软件的装置说明启动操作。PostgreSQL Wiki 中提供了一个可用的外部数据包装器列表。

您须要定义以下对象:

•一个形容如何衔接到远程数据源的外部主机

•一个主机的用户映射,用于为口头迁徙的用户提供凭据

权限

您须要一个领有上方权限的数据库用户

•数据库上方的CREATE权限

•在装置了裁减的形式上方的USAGE权限

•外部主机上方的USAGE权限

•一切必需的迁徙函数上方的EXECUTE权限(通常自动会授予)

迁徙成功后,可以缩小用户权限。

db_migrator 插件

您还须要为要迁徙的数据源,装置db_migrator插件。雷同,请依照软件随附的装置说明启动操作。

架构

db_migrator经常使用到两个辅佐形式,即 “FDW 暂存形式” 和 “Postgres 暂存形式”。自动状况下,称号为fdw_stage和pgsql_stage,但您也可以选用不同的称号。

在第一步中,db_migrator调用插件经常使用外部表填充fdw_stage,这些表以规范化方式提供无关远程数据源元数据的消息(无关具体消息,请参阅插件 API)。

在第二步中,数据被复制到 Postgres 暂存形式的表中,从而在 FDW 暂存形式生成一种数据快照。本章开端将具体引见这些表。在此快照时期,可以经常使用插件提供的一个函数转换表名和列名。该插件还提供了一个远程数据类型到 PostgreSQL 数据类型的自动映射。

下一步,用户在 Postgres 暂存形式修负数据,以顺应迁徙要求(不同的数据类型、对函数和视图定义的编辑等)。这是经过降级 Postgres 暂存形式中的表来成功的。此外,大少数表都有一个boolean类型的migrate列,应该为要迁徙的一切对象设置该列为TRUE。

下一步是在 PostgreSQL 数据库中创立形式,并经常使用指向远程数据源中对象的外部表,填充这些形式。而后,这些表会被“物化”,即创立本地表,并未来自外部表的数据拔出到本地表中。

而后可以迁徙其他对象,最后迁徙索引和解放。

迁徙成功后,不再须要 FDW 暂存形式和 PostgreSQL 暂存形式(以及外部数据包装器),可以将其删除。

Postgres 暂存形式中的表

仅编辑批示的列。例如,假设要更改形式或表称号,最好在成功迁徙后重命名形式或表。

•schema(类型name):形式的称号

•orig_schema(类型text):远程数据源中经常使用的形式称号

•schema(类型name):表的形式

•table_name(类型name):表的称号

•orig_table(类型text):远程数据源中经常使用的表名

•migrate(类型boolean,自动值TRUE):该表应该迁徙时,为TRUE假设须要,请修正此列。

•schema(类型name):蕴含列的表的形式

•table_name(类型name):蕴含列的表

•column_name(类型name):列的称号

•column_options(类型jsonb):特定于插件的列选项

•orig_column(类型text):远程数据源中经常使用的列名

•position(类型integer):定义列的顺序(第一列为 1)

•type_name(类型text):PostgreSQL 数据类型(包括类型润色符)假设须要,请修正此列。

•orig_type(类型text):远程数据源中的数据类型

•nullable(类型boolean):假设列是NOT NULL,则为FALSE假设须要,请修正此列。

•default_value(类型text):假设须要,请修正此列。

checks(审核解放)

•schema(类型name):具有该解放的表的形式

•table_name(类型name):具有该解放的表

•constraint_name(类型name):解放的称号

•orig_name(类型text):远程数据源中解放的称号

•deferrable(类型boolean):假设解放可以提前,则为TRUE假设须要,请修正此列。

•deferred(类型boolean):假设解放是INITIALLY DEFERRED,则为TRUE假设须要,请修正此列。

•condition(类型text):待审核的条件假设须要,请修正此列。

•migrate(类型boolean,自动值TRUE):解放应该迁徙时,则为TRUE假设须要,请修正此列。

keys(主键和惟一键的列)

•schema(类型name):具有该解放的表的形式

•table_name(类型name):具有该解放的表

•constraint_name(类型name):解放的称号

•orig_name(类型text):远程数据源中解放的称号

•deferrable(类型boolean):假设解放可以提前,则为TRUE假设须要,请修正此列。

•deferred(类型boolean):假设解放是INITIALLY DEFERRED,则为TRUE假设须要,请修正此列。

•column_name(类型name):属于键的列的称号

•position(类型integer):定义解放中列的顺序

•is_primary(类型boolean):假设这是主键,则为TRUE

•migrate(类型boolean,自动值TRUE):解放应该迁徙时,则为TRUE假设须要,请修正此列。

•schema(类型name):带有该索引的表的形式

•table_name(类型name):带有该索引的表

•index_name(类型name):索引的称号

•orig_name(类型text):远程数据源中索引的称号

•uniqueness(类型boolean):假设这是惟一索引,则为TRUE假设须要,请修正此列。

•where_clause(类型text):关联到一个局部索引的表白式NULL示意没有运行过滤器。

•migrate(类型boolean,自动值TRUE):解放应该迁徙时,则为TRUE假设须要,请修正此列。

index_columns

•schema(类型name):带有索引的表的形式

•table_name(类型name):带有该索引的表

•index_name(类型name):索引的称号

•position(类型integer):确定索引列顺序

•descend(类型boolean):假设索引列按DESC排序,则为TRUE假设须要,请修正此列。

•is_expression(类型boolean):假设索引列是表白式而不是列名,则为TRUE

•column_name(类型text):列的称号或许索引表白式(表白式通常必定用括号括起来)假设须要,请修正此列。

partitions

假设您在 PostgreSQL 中不须要一个分区表,请从此表中删除相关的行。或许,假设您想要将一个未分区的表迁徙到 PostgreSQL 中的分区表,则可以在此表中增加相应的行。

•schema(类型name):分区表的形式

•table_name(类型name):分区表的称号

•partition_name(类型name):分区的称号

•orig_name(类型name):远程数据源中的分区称号

•type(类型text):可支持的一种分区方式,LIST、RANGE或HASH

•key(类型text):用作分区键的列名或表白式

•values(类型text[]):分区绑定规范

•values是分区绑定规范非数字值(如时期戳)必定作为字符串常量用引号援用(例如ARRAY['''2022-01-01''','''2023-01-01'''])。

关于列表分区,values蕴含列表

关于范围分区,values蕴含下限和下限(其中下限是蕴含的,但下限是不包括的)

关于哈希分区,values中惟一的条目,是此分区的余数局部

•is_default(类型boolean,自动值FALSE);假设是自动分区,则为TRUE

subpartitions

假设您在 PostgreSQL 中不须要一个子分区表,请从此表中删除相关的行。或许,假设要将没有子分区的表迁徙到 PostgreSQL 中有子分区的表,则可以在此表中增加相应的行。

•schema(类型name):分区表的形式

•table_name(类型name):分区表的称号

•partition_name(类型name):父分区的称号

•subpartition_name(类型name):子分区的称号

•orig_name(类型name):远程数据源中子分区的称号

•type(类型text):可支持的一种分区方式,LIST、RANGE或HASH

•key(类型text):用作分区键的列名或表白式

•values(类型text[]):分区绑定规范请参阅上方partitions表的文档中values局部的说明。

•is_default(类型boolean,自动值FALSE);假设是自动子分区,则为TRUE

•schema(类型name):带有视图的表的形式

•view_name(类型name):视图的称号

•definition(类型text):定义视图的 SQL 语句假设须要,请修正此列。

•orig_def(类型text):远程数据源上的视图定义

•migrate(类型boolean,自动值TRUE):解放应该迁徙时,为TRUE假设须要,请修正此列。

•verified(类型boolean):可以按你所需地经常使用假设视图已成功转换,这或许对存储很有用。

•schema(类型name):序列的形式

•sequence_name(类型name):序列的称号

•min_value(类型bigint):生成值的最小值假设须要,请修正此列。

•max_value(类型bigint):生成值的最大值假设须要,请修正此列。

•increment_by(类型bigint):生成值之间的差值假设须要,请修正此列。

•cyclical(类型boolean):假设序列“翻转”了,则为TRUE假设须要,请修正此列。

•cache_size(类型integer):客户端缓存的序列值数目假设须要,请修正此列。

functions(函数和存储环节)

•schema(类型name):函数或存储环节的形式

•function_name(类型name):函数或存储环节的称号

•is_procedure(类型boolean):假设是存储环节,则为TRUE假设须要,请修正此列。

•source(类型text):函数或存储环节的源代码假设须要,请修正此列。

•orig_source(类型text):远程数据源上的源代码

•migrate(类型boolean,自动值FALSE):对象应该迁徙时,则为TRUE假设须要,请修正此列。 请留意,由于自动值为FALSE,自动状况下不会迁徙函数和存储环节。

•verified(类型boolean):可以按你所需地经常使用假设源代码已成功转换,这或许对存储很有用。

•schema(类型name):带有触发器的表的形式

•table_name(类型name):触发器关联的表的称号

•trigger_name(类型name):触发器的称号

•trigger_type(类型text):BEFORE、AFTER或INSTEAD OF假设须要,请修正此列。

•triggering_event(类型text):INSERT、UPDATE、DELETE或TRUNCATE(假设须要多个,则经常使用OR联合)假设须要,请修正此列。

•for_each_row(类型boolean):假设触发器是针对每个修正的行口头一次性,而不是每个触发的语句口头一次性,则为TRUE假设须要,请修正此列。

•when_clause(类型text):触发器口头的条件假设须要,请修正此列。

•trigger_body(类型text):触发器的函数体假设须要,请修正此列。

•orig_source(类型text):远程数据源上的触发器源代码

•migrate(类型boolean,自动值FALSE):触发器应该迁徙时,则为TRUE假设须要,请修正此列。 请留意,由于自动值为FALSE,自动状况下不会迁徙触发器。

•verified(类型boolean):可以按你所需地经常使用假设触发器已成功转换,这或许对存储很有用。

table_privs(表上的权限)

这些权限不会由db_migrator迁徙,但迁徙脚本可以经常使用这些权限消息来迁徙权限。

•schema(类型name):具有该权限的表的形式

•table_name(类型name):具有该权限的表的称号

•privilege(类型text):权限的称号

•grantor(类型name):授予权限的用户

•grantee(类型name):取得权限的用户

•grantable(类型boolean):假设被授权者可以将权限授予其他人,则为TRUE

column_privs(表列上的权限)

这些权限不会由db_migrator迁徙,但迁徙脚本可以经常使用这些权限消息来迁徙权限。

•schema(类型name):具有该权限的表的形式

•table_name(类型name):具有该权限的表的称号

•column_name(类型name):具有该权限的表列的称号

•privilege(类型text):权限的称号

•grantor(类型name):授予权限的用户

•grantee(类型name):取得权限的用户

•grantable(类型boolean):假设被授权者可以将权限授予其他人,则为TRUE

用法

口头迁徙的数据库用户,将会是一切迁徙的形式和对象的一切者。在迁徙成功后,一切权可以转移。数据库对象上方的权限是不会迁徙的(但插件或许会提供数据源上方权限的消息)。

对转换环节代码(函数、存储环节和触发器)并没有特意的支持,您必定自己成功。

关于十分繁难的状况(无需迁徙存储环节或触发器,一切视图均驳回规范 SQL,无需数据类型适配),只需调用db_migrate函数,即可迁徙所需的数据库形式。

关于更复杂的迁徙,您要编写一个口头以下操作(或局部口头)的 SQL 脚本:

•调用db_migrate_prepare以创立和填充 FDW 和 Postgres 暂存形式(无关具体消息,请参阅架构)。

•如今,您可以降级 Postgres 暂存形式中的表,以更改数据类型、存储环节代码、视图等。这也是在 Postgres 暂存形式的表中设置migrate标志的时刻,以批示哪些对象应该迁徙,哪些对象不应该迁徙。

•在调用db_migrate_mkforeign之前的任何给定时期点,都可以调用db_migrate_refresh,以经常使用元数据降级 Postgres 暂存形式中的快照。

•接上去,调用db_migrate_mkforeign以迁徙形式和创立的外部表,这些表指向蕴含了应迁徙数据的远程对象。

•如今,假设须要对这些外部表启动调整,则可以经常使用ALTER FOREIGN TABLE。

•接上去,调用db_migrate_tables,以将外部表交流为实践的 PostgreSQL 表,并迁徙数据。此步骤通常须要破费最多时期。请留意,可以选用口头“仅形式”迁徙来测试对象定义,而无需迁徙一切数据。

•假设要迁徙此类对象,如今可以调用db_migrate_functions、db_migrate_triggers和db_migrate_views函数,来迁徙这些对象。 假设视图依赖于函数,则最后调用db_migrate_views。

•而后,调用db_migrate_constraints,以迁徙那些已迁徙表的索引和解放。将此操作放到最起初口头,通常是个好主意,由于索引和解放或许会依赖于函数。

•最后,调用db_migrate_finish,以删除由db_migrate_prepare创立的 FDW 和 Postgres 暂存形式。

在数据库迁徙环节中出现失误(衔接疑问除外),解决不会中断。相反,它们将会作为正告输入。此外,此类失误解记载在 PostgreSQL 暂存形式中的migrate_log表里。

前面失误或许是前面失误的结果:例如,迁徙 Oracle 表的任何失败,也会造成依赖于该表的一切视图和解放失败。

成功后,请删除迁徙用的裁减,以删除迁徙的一切跟踪消息。

迁徙函数的具体说明

db_migrate_prepare

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•server(类型name,必填):形容要迁徙的数据源的外部主机的称号

•staging_schema(类型name,自动值fdw_stage):远程暂存形式的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

•only_schemas(类型name[],自动蕴含一切形式):要迁徙的形式列表输入的内容必定与远程数据源上的形式称号齐全相反。

•options(类型jsonb,可选):传递给插件的选项无关可用选项,请参阅插件的文档。

必定先调用此函数。它会创立暂存形式。插件会填充远程暂存形式。它会调用db_migrate_refresh,以在 Postgres 暂存形式创立远程暂存形式的快照。

db_migrate_refresh

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•staging_schema(类型name,自动值fdw_stage):远程暂存形式的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

•only_schemas(类型name[],自动蕴含一切形式):要迁徙的形式列表

您可以调用此函数,以经常使用远程暂存形式的新快照刷新 Postgres 暂存形式。只需远程数据源上没有对象被重命名或删除,这就可以上班(增加表和列也可以反常上班)。对 Postgres 暂存形式所做的编辑将被保管。

db_migrate_mkforeign

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•server(类型name,必填):形容要迁徙的数据源的外部主机的称号

•staging_schema(类型name,自动值fdw_stage):远程暂存形式的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

•options(类型jsonb,可选):传递给插件的选项无关可用选项,请参阅插件的文档。

在对 Postgres 暂存形式编辑成功后,调用此函数。它将创立一切应迁徙的形式,并为要迁徙的一切远程表创立外部表。

db_migrate_tables

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

•with_data(类型boolean,自动值TRUE):假设为FALSE,将迁徙除表数据之外的一切内容这关于测试元数据的迁徙十分有用。

此函数调用materialize_foreign_table,以将db_migrate_mkforeign创立的一切外部表交流为实践表。 除非with_data是FALSE,否则将迁徙表数据。

db_migrate_functions

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

调用此函数以迁徙函数和存储环节。请留意,函数和存储环节自动会设置migrate为FALSE,因此假设要迁徙函数,则必定更改该标志。

db_migrate_views

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

调用此函数以迁徙视图。

db_migrate_triggers

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

调用此函数以迁徙触发器。请留意,触发器自动会设置migrate为FALSE,因此假设要迁徙触发器,则必定更改该标志。

db_migrate_indexes

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

调用此函数可迁徙那些已迁徙表的用户定义索引。

此函数应在迁徙函数后运转,以便索引所需的一切函数都已存在。

db_migrate_constraints

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

调用此函数可迁徙已迁徙表的解放和列自动值。

此函数必定在迁徙其他一切内容后运转,以便列自动值或许须要的一切函数都已存在,并且外键解放可以经常使用到用户定义的索引来放慢数据验证。

db_migrate_finish

参数:

•staging_schema(类型name,自动值fdw_stage):远程暂存形式的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

迁徙所需的一切内容后调用此函数。它将会删除暂存形式及其一切内容。

db_migrate

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•server(类型name,必填):形容要迁徙的数据源的外部主机的称号

•staging_schema(类型name,自动值fdw_stage):远程暂存形式的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

•only_schemas(类型name[],自动蕴含一切形式):要迁徙的形式列表输入的内容必定与远程数据源上的形式称号齐全相反。

此函数经过按以下顺序调用这些函数,来提供“一键式”迁徙:

•db_migrate_prepare

•db_migrate_mkforeign

•db_migrate_tables

•db_migrate_functions

•db_migrate_views

•db_migrate_triggers

•db_migrate_indexes

•db_migrate_constraints

•db_migrate_finish

这提供了一种迁徙繁难数据库的简双方法(没有用户定义的函数和触发器,视图定义驳回合乎规范的 SQL,无需修负数据类型)。

请留意,它不会迁徙函数和触发器,由于自动状况下这些对象的migrate是FALSE。

底层迁徙函数

这些函数由上方详述的迁徙函数调用。

它们作为底层成功方法提供,假设您想并行迁徙多个相关,以提高经常使用自己的外部工具的解决速度,则它们特意有用。

materialize_foreign_table

参数:

•schema(类型name,必填):要迁徙的表的形式

•table_name(类型name,必填):要迁徙的表的称号

•with_data(类型boolean,自动值TRUE):假设为FALSE,将迁徙除表数据之外的一切内容这关于测试元数据的迁徙十分有用。

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

此函数将db_migrate_mkforeign创立的单个外表交流为实践表。假设partitions表中有任何此表的条目,则该表将创立为分区表。假设subpartitions表中存在相应的条目,则创立子分区。除非with_data参数值是FALSE,否则将迁徙表数据。

construct_schemas_statements

参数:

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

将前往一个由以下列组成的表:

•schema_name(类型name):形式的称号

•statement(类型text):形式相关的 CREATE SCHEMA 语句

construct_sequences_statements

参数:

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

将前往一个由以下列组成的表:

construct_foreign_tables_statements

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•server(类型name,必填):形容要迁徙的数据源的外部主机的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

•options(类型jsonb,可选):传递给插件的选项

将前往一个由以下列组成的表:

•schema_name(类型name):带有该外部表的表的形式

•table_name(类型name):外表的称号

•statement(类型text):外表相关的 CREATE FOREIGN TABLE 语句

construct_functions_statements

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

将前往一个由以下列组成的表:

•schema_name(类型name):带有该函数的表的形式

•function_name(类型name):函数或存储环节的称号

•statement(类型text):函数相关的 CREATE FUNCTION 或 CREATE PROCEDURE 语句

construct_views_statements

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

将前往一个由以下列组成的表:

•schema_name(类型name):带有该函数的表的形式

•view_name(类型name):视图的称号

•statements(类型text[]):视图相关的 SET LOCAL search_path 和 CREATE VIEW 语句

construct_triggers_statements

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

将前往一个由以下列组成的表:

construct_indexes_statements

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

将前往一个由以下列组成的表:

•schema_name(类型name):带有索引的表的形式

•index_name(类型name):索引的称号

•statement(类型text):索引相关的 CREATE INDEX 语句

construct_key_constraints_statements

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

将前往一个由以下列组成的表:

•schema_name(类型name):表的形式

•table_name(类型name):带有该键解放的表的称号

•statement(类型text):表相关的 ADD CONSTRAINT 语句

construct_fkey_constraints_statements

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

将前往一个由以下列组成的表:

•schema_name(类型name):表的形式

•table_name(类型name):带有该外键解放的表的称号

•statement(类型text):表相关的 ADD CONSTRAINT 语句

construct_check_constraints_statements

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

将前往一个由以下列组成的表:

construct_defaults_statements

参数:

•plugin(类型name,必填):要经常使用的db_migrator插件的称号

•pgstage_schema(类型name,自动值pgsql_stage):Postgres 暂存形式的称号

将前往一个由以下列组成的表:

•schema_name(类型name):表的形式

•table_name(类型name):列带有自动值的表的称号

•statement(类型text):表相关的 ALTER SET DEFAULT 语句

execute_statements

参数:

•operation(类型text,必填):恣意操作说明

•schema(类型name,必填):语句相关对象的形式

•object_name(类型name,必填):语句所触及的相关的称号

•statements(类型text[],必填):在同一子事务中口头的语句

•pgstage_schema(类型name,自动值pgsql_stage):migrate_log表创立时所在的 Postgres 暂存形式的称号

此函数会遍历一个 SQL 语句数组,并在子事务中口头它们。假设一个语句失败,它会引发一条具体的正告,并将失败的语句及其高低文拔出到migrate_log表中,并且子事务中一切先前成功的语句都将被回滚。失败时会前往false。

插件 API

给db_migrator用的插件必定是一个 PostgreSQL 裁减,并提供许多函数:

db_migrator_callback

没有输入参数。输入参数为:

•create_metadata_views_fun(类型regprocedure): 填充 FDW 暂存形式的“元数据视图创立函数”

•translate_datatype_fun(类型regprocedure): “数据类型转换函数”,用于将远程数据源中的数据类型转换为 PostgreSQL 数据类型

•translate_identifier_fun(类型regprocedure): “标识符转换函数”,用于将远程数据源中的标识符称号转换为 PostgreSQL 标识符

•translate_expression_fun(类型regprocedure): “表白式转换函数”,用于将 SQL 表白式从远程数据源转换到 PostgreSQL

•create_foreign_table_fun(类型regprocedure): “外表创立函数”,用于生成 SQL 字符串以定义外表

这些函数可以具有恣意称号,如下所述。

元数据视图创立函数

参数:

•server(类型name,必填):咱们要访问其元数据的外部主机的称号

•schema(类型name):FDW 暂存形式的称号

•options(类型jsonb,可选):插件特定的参数

在创立 FDW 暂存形式后,db_migrate_prepare将调用此函数。它必定创立一些外部表(或外部表上的视图),以提供对远程数据源元数据的访问。

假设远端数据源没有提供某项性能(比如,该数据源不支持触发器的个性),则可以创立一个空表,而不是相应的外表。

假设插件提供了其他性能,则准许在 FDW 暂存形式中创立其他对象。雷同,除了 API 规范要求的列之外,还可以提供其他列。

以下外部表或视图是必定创立的:

形式表

序列表

sequences  sequence_name  min_valuemax_valueincrement_by  cyclical  cache_size  last_value  

表消息的表

   table_name   

表列和视图列的表

columns (schematextNOT NULL,table_nametextNOT NULL,column_nametextNOT NULL,positioninteger NOT NULL,type_nametextNOT NULL,lengthinteger NOT NULL,precisioninteger,scaleinteger,nullableboolean NOT NULL,default_value text)

请留意,此表必定同时蕴含tables和views表的列。

•position定义表列的顺序

•length示意变长数据类型的长度限度,例如character varying关于具有固定长度,或许带有precision和scale的数据类型,请将它设置为 0。

•precision示意变长数值类型的有效位数

•scale示意变长数值类型的小数点后的最大有效位数

•default_value是列定义DEFAULT子句中的 SQL 表白式

审核解放表

checks  table_name constraint_name  deferrable  deferred  condition 

•constraint_name标识解放,但称号不会迁徙

•deferrable假设解放可以推早退事务完结口头,则应为TRUE

•deferred假设解放是智能提前的,则应为TRUE

•condition是定义审核解放的 SQL 表白式db_migrator不会迁徙col IS NOT NULL方式的审核解放。 应确保此类列columns.nullable为 FALSE。

主键列和惟一解放列的表

  table_name constraint_name  deferrable  deferred  column_name position  is_primary  

•constraint_name标识解放,但称号不会迁徙

•deferrable假设解放可以推早退事务完结口头,则应为TRUE

•deferred假设解放是智能提前的,则应为TRUE

•position定义多列解放中列的顺序

•is_primary关于惟一解放是FALSE,关于主键是TRUE

关于一个多列解放,每个列在表中都会有一行。

外键解放列的表

foreign_keys  table_name constraint_name  deferrable  deferred  delete_rule column_name position  remote_schema remote_table remote_column 

•constraint_name标识解放,但称号不会迁徙

•deferrable假设解放可以推早退事务完结口头,则应为TRUE

•deferred假设解放是智能提前的,则应为TRUE

•position定义多列解放中列的顺序

关于一个多列解放,每个列在表中都会有一行。

分区的表

partitions name table_namename partition_name name   is_default  

•type是可支持的一种分区方式,LIST、RANGE或HASH

•key用作分区键的列名或表白式

•values是分区绑定规范非数字值(如时期戳)必定作为字符串常量用引号援用(例如ARRAY['''2022-01-01''','''2023-01-01'''])。

•关于列表分区,values蕴含列表

•关于范围分区,values蕴含下限和下限(其中下限是蕴含的,但下限是不包括的)

•关于哈希分区,values中惟一的条目,是此分区的余数局部

•is_default假设是自动分区,则为TRUE

子分区的表

subpartitions name table_namename partition_namename subpartition_name name   is_default  

无关说明,请参见上方的partitions表。

视图表

views   view_name  definition   

•definition是定义视图的SELECT语句

视图的列在columns表中定义。

函数和存储环节的表

functions  function_name  is_procedure  source 

•is_procedure关于函数是FALSE,关于存储环节是TRUE

•source是函数的源代码,包括参数列表和前往类型

索引表

indexes  table_name index_name uniqueness  where_clause

•index_name标识索引,但称号不会迁徙

•uniqueness关于惟一索引是TRUE

•where_clause是一个局部索引表白式,或 NULL

索引列的表

index_columns  table_name index_name position  descend  is_expression   column_name 

•position定义多列索引中列的顺序

•descend假设索引列按降序排序,则为TRUE;假设索引列按升序排序,则为FALSE

•is_expression假设column_name是惯例列名而不是表白式,则为FALSE

•column_name是索引列名或表白式

触发器表

triggers  table_name trigger_name trigger_type triggering_event for_each_row  when_clausetrigger_body 

•trigger_type应为BEFORE、AFTER或INSTEAD OF

•triggering_event形容了造成触发器口头的 DML 事情,例如DELETE或INSERT OR UPDATE

•for_each_row关于语句级触发器为FALSE,关于行级触发器为TRUE

•when_clause是用于按条件口头的触发器的一个 SQL 表白式

•trigger_body是触发器的源代码

表权限的表

table_privs  table_name  privilege grantor grantee grantable  

列权限的表

column_privs  table_name column_name  privilege grantor grantee grantable  

数据类型转换函数

参数:

•类型称号(类型text):远程数据源上的数据类型的称号

•长度(类型integer):变长非数值类型的最大长度

•精度(类型integer):变长数值类型的最大有效位数

•小数位数(类型integer):变长数值类型的小数点后位数

结果类型:text

此函数将远程数据源中的数据类型转换为 PostgreSQL 数据类型。假设适用,结果应该包括类型润色符,例如character varying(20)。

标识符转换函数

参数:

•标识符称号(类型text):远程数据源上的标识符的称号

结果类型:name

此函数应生成一个 PostgreSQL 对象或列的称号。假设不须要转换,该函数应仅前往其参数,该参数将会智能截断为 63 个字节。

表白式转换函数

参数:

•SQL 表白式(类型text):远程数据源上的 SQL 表白式,用于列自动值、审核解放或索引定义

结果类型:text

此函数应该尽最大抵力在 SQL 方言之间智能转换表白式。在迁徙环节中,此函数不可转换的任何内容都必定手动转换。

外表创立函数

参数:

•外部主机(类型name):要迁徙的 PostgreSQL 外部主机

•形式(类型name):外表的 PostgreSQL 形式称号

•表名(类型name):外表的 PostgreSQL 称号

•原始形式(类型text):远程数据源上表的形式

•原始表名(类型text):远程数据源上的表名

•列名(类型name[]):外表列的称号

•列选项(类型jsonb[]):特定于插件的 FDW 列选项

•原始列名(类型text[]):远程数据源上的列名

•数据类型(类型text[]):外表列的数据类型

•可否为空(类型boolean[]):假设外表列是NOT NULL,则为FALSE

•额外选项(类型jsonb):特定于插件的选项;这是经过db_migrate_mkforeign的options参数传递的

结果类型:text

此函数生成一个CREATE FOREIGN TABLE语句,该语句经常使用这些定义创立一个外表。它是必需的,由于语法会因外部数据包装器而异。

您可能还会对下面的文章感兴趣: