Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo di un database PostgreSQL come destinazione per AWS Database Migration Service
È possibile migrare i dati ai database PostgreSQL utilizzando AWS DMS, da un altro database PostgreSQL o da uno degli altri database supportati.
Per informazioni sulle versioni di PostgreSQL supportate come destinazione, AWS DMS consulta. Obiettivi per AWS DMS
Nota
-
Amazon Aurora Serverless è disponibile come destinazione per Amazon Aurora con compatibilità PostgreSQL. Per ulteriori informazioni su Amazon Aurora Serverless, consulta Using Amazon Aurora Serverless v2 nella Amazon Aurora User Guide.
-
I cluster di database Aurora serverless possono essere utilizzati solo da un Amazon VPC e non possono usare un indirizzo IP pubblico. Quindi, se l'istanza di replica è in una regione diversa da quella di Aurora PostgreSQL serverless, devi configurare il peering vpc. In alternativa, verifica la disponibilità delle regioni Aurora PostgreSQL serverless e decidi di utilizzarne una per Aurora PostgreSQL serverless e per l'istanza di replica.
-
La funzionalità Babelfish è integrata in Amazon Aurora senza costi aggiuntivi. Per ulteriori informazioni, consulta Utilizzo di Babelfish per Aurora PostgreSQL come destinazione per AWS Database Migration Service.
AWS DMS adotta un table-by-table approccio per la migrazione dei dati dall'origine alla destinazione nella fase di caricamento completo. L'ordine delle tabelle durante la fase di caricamento completo non può essere garantita. Le tabelle non sono sincronizzate durante la fase di caricamento completo e durante l'applicazione di transazioni memorizzate nella cache per singole tabelle. Di conseguenza, i vincoli di integrità referenziale attivi possono causare un errore dell'attività durante la fase di caricamento completo.
In PostgreSQL, le chiavi esterne (vincoli di integrità referenziale) sono implementate mediante trigger. Durante la fase di pieno caricamento, AWS DMS carica ogni tabella una alla volta. Consigliamo vivamente di disabilitare i vincoli delle chiavi esterne durante un caricamento completo, utilizzando uno dei seguenti metodi:
-
Disabilitare temporaneamente tutti i trigger dall'istanza, quindi terminare il caricamento completo.
-
Utilizzare il parametro
session_replication_role
in PostgreSQL.
In qualsiasi momento, un trigger può trovarsi in uno dei seguenti stati: origin
, replica
, always
o disabled
. Quando il parametro session_replication_role
è impostato su replica
, solo i trigger nello stato replica
sono attivi e vengono attivati quando sono chiamati. In caso contrario, i trigger rimangono inattivi.
PostgreSQL dispone di un meccanismo di sicurezza per evitare che una tabella venga troncata, anche quando session_replication_role
è impostato. Puoi utilizzare tale opzione come alternativa alla disabilitazione dei trigger, per facilitare il completamento dell'esecuzione del caricamento completo. Per eseguire questa operazione, imposta la modalità di preparazione della tabella di destinazione su DO_NOTHING
. In caso contrario, le operazioni DROP e TRUNCATE avranno esito negativo in presenza di vincoli delle chiavi esterne.
In Amazon RDS, puoi controllare l'impostazione di questo parametro mediante un gruppo di parametri. Per un'istanza PostgreSQL in esecuzione su Amazon EC2, puoi impostare il parametro direttamente.
Per ulteriori dettagli sull'utilizzo di un database PostgreSQL come destinazione AWS DMS per, consulta le seguenti sezioni:
Argomenti
- Limitazioni all'uso di PostgreSQL come destinazione per AWS Database Migration Service
- Requisiti di sicurezza quando si utilizza un database PostgreSQL come destinazione per AWS Database Migration Service
- Impostazioni degli endpoint e attributi di connessione aggiuntivi (ECA) quando si utilizza PostgreSQL come destinazione per AWS DMS
- Tipi di dati di destinazione per PostgreSQL
- Usare Babelfish per Aurora PostgreSQL come destinazione per AWS Database Migration Service
Limitazioni all'uso di PostgreSQL come destinazione per AWS Database Migration Service
Quando si utilizza un database PostgreSQL come destinazione per AWS DMS, si applicano le seguenti limitazioni:
-
Per le migrazioni eterogenee, il tipo di dati JSON viene convertito internamente nel tipo di dati CLOB nativo.
-
In una migrazione da Oracle a PostgreSQL, se una colonna in Oracle contiene un carattere NULL (valore esadecimale U+0000), converte il carattere NULL in uno spazio (valore esadecimale U+0020) AWS DMS . Ciò si verifica a causa di una limitazione di PostgreSQL.
-
AWS DMS non supporta la replica su una tabella con un indice univoco creato con la funzione coalesce.
-
Se le tabelle utilizzano sequenze, aggiorna il valore di
NEXTVAL
per ogni sequenza nel database di destinazione dopo aver interrotto la replica dal database di origine. AWS DMS copia i dati dal database di origine, ma non migra le sequenze verso il target durante la replica in corso.
Requisiti di sicurezza quando si utilizza un database PostgreSQL come destinazione per AWS Database Migration Service
Per motivi di sicurezza, l'account utente utilizzato per la migrazione dei dati deve corrispondere a un utente registrato in qualsiasi database PostgreSQL utilizzato come destinazione.
L'endpoint di destinazione PostgreSQL richiede autorizzazioni utente minime per eseguire AWS DMS una migrazione, vedi gli esempi seguenti.
CREATE USER newuser WITH PASSWORD 'your-password'; ALTER SCHEMA schema_name OWNER TO newuser;
Oppure
GRANT USAGE ON SCHEMA schema_name TO myuser; GRANT CONNECT ON DATABASE postgres to myuser; GRANT CREATE ON DATABASE postgres TO myuser; GRANT CREATE ON SCHEMA schema_name TO myuser; GRANT UPDATE, INSERT, SELECT, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA schema_name TO myuser; GRANT TRUNCATE ON schema_name."BasicFeed" TO myuser;
Impostazioni degli endpoint e attributi di connessione aggiuntivi (ECA) quando si utilizza PostgreSQL come destinazione per AWS DMS
È possibile utilizzare le impostazioni degli endpoint e gli attributi di connessione aggiuntivi (ECA) per configurare il database di destinazione PostgreSQL.
Le impostazioni vengono specificate quando si crea l'endpoint di destinazione utilizzando la AWS DMS console o utilizzando il create-endpoint
comando in, con la sintassi JSON. AWS CLI--postgre-sql-settings '{"
EndpointSetting
":
"value"
, ...
}'
È possibile specificare le ECA utilizzando il ExtraConnectionAttributes
parametro per l'endpoint.
La tabella riportata di seguito mostra le impostazioni degli endpoint che è possibile utilizzare con PostgreSQL come destinazione.
Nome | Descrizione |
---|---|
|
Specifica le dimensioni massime (in KB) di qualsiasi file .csv utilizzato per il trasferimento dei dati su PostgreSQL. Valore predefinito: 32.768 KB (32 MB) Valori validi: 1-1.048.576 KB (fino a 1,1 GB) Esempio: |
|
Imposta il timeout dell'istruzione del client per l'istanza PostgreSQL in secondi. Il valore predefinito è 60 secondi. Esempio: |
|
Questo attributo AWS DMS ignora le chiavi esterne e i trigger utente per ridurre il tempo necessario per caricare in blocco i dati. |
|
Questo parametro tratta le colonne con tipi di dati NUMERIC illimitati come STRING per eseguire correttamente la migrazione senza perdere la precisione del valore numerico. Usa questo parametro solo per la replica dall'origine PostgreSQL alla destinazione PostgreSQL o ai database con compatibilità PostgreSQL. Valore predefinito: false Valori validi: false/true Esempio: L'utilizzo di questo parametro può comportare un peggioramento delle prestazioni di replica a causa della trasformazione da valore numerico a stringa e di nuovo a valore numerico. Questo parametro è supportato per l'uso da DMS versione 3.4.4 e successive NotaUtilizza L'uso di Non utilizzare |
|
Utilizzate questo attributo di connessione aggiuntivo (ECA) per trasferire i dati per le operazioni di caricamento completo utilizzando il comando\ COPY. Valore predefinito: Valori validi: true/false Esempio ECA: Nota: l'impostazione di questo ECA su false potrebbe comportare un peggioramento delle prestazioni di replica a causa dell'esecuzione diretta degli INSERT. |
|
Utilizza questo attributo per modificare il comportamento predefinito della gestione da parte della replica degli endpoint compatibili con PostgreSQL che richiedono una configurazione aggiuntiva, come gli endpoint Babelfish. Valore predefinito: Valori validi: Esempio: |
|
Utilizza questo attributo per specificare il nome del database T-SQL Babelfish di destinazione in cui eseguire la migrazione. Questo è necessario se Esempio: |
Tipi di dati di destinazione per PostgreSQL
L'endpoint del database PostgreSQL per AWS DMS supporta la maggior parte dei tipi di dati del database PostgreSQL. La tabella seguente mostra i tipi di dati di destinazione del database PostgreSQL supportati durante l' AWS DMS utilizzo e la mappatura predefinita dei tipi di dati. AWS DMS
Per ulteriori informazioni sui tipi di AWS DMS dati, vedere. Tipi di dati per AWS Database Migration Service
AWS DMS tipo di dati |
Tipo di dati PostgreSQL |
---|---|
BOOLEAN |
BOOLEAN |
BLOB |
BYTEA |
BYTES |
BYTEA |
DATE |
DATE |
TIME |
TIME |
DATETIME |
Se il dimensionamento è compreso tra 0 e 6, utilizzare TIMESTAMP. Se il dimensionamento è compreso tra 7 e 9, utilizzare VARCHAR (37). |
INT1 |
SMALLINT |
INT2 |
SMALLINT |
INT4 |
INTEGER |
INT8 |
BIGINT |
NUMERIC |
DECIMAL (P,S) |
REAL4 |
FLOAT4 |
REAL8 |
FLOAT8 |
STRING |
Se la lunghezza è compresa tra 1 e 21.845, utilizzare VARCHAR (lunghezza in byte). Se la lunghezza è compresa tra 21.846 e 2.147.483.647, utilizzare VARCHAR (65535). |
UINT1 |
SMALLINT |
UINT2 |
INTEGER |
UINT4 |
BIGINT |
UINT8 |
BIGINT |
WSTRING |
Se la lunghezza è compresa tra 1 e 21.845, utilizzare VARCHAR (lunghezza in byte). Se la lunghezza è compresa tra 21.846 e 2.147.483.647, utilizzare VARCHAR (65535). |
NCLOB |
TEXT |
CLOB |
TEXT |
Nota
Quando si esegue la replica da un'origine PostgreSQL AWS DMS , crea la tabella di destinazione con gli stessi tipi di dati per tutte le colonne, ad eccezione delle colonne con tipi di dati definiti dall'utente. In questi casi, il tipo di dati viene creato come "carattere variabile" nella destinazione.
Usare Babelfish per Aurora PostgreSQL come destinazione per AWS Database Migration Service
È possibile migrare le tabelle di origine SQL Server in una destinazione Babelfish per Amazon Aurora PostgreSQL mediante AWS Database Migration Service. Con Babelfish, Aurora PostgreSQL comprende T-SQL, il linguaggio SQL di proprietà di Microsoft SQL Server, e supporta lo stesso protocollo di comunicazione. Pertanto, le applicazioni scritte per SQL Server possono ora funzionare con Aurora con meno modifiche al codice. La funzionalità Babelfish è integrata in Amazon Aurora senza costi aggiuntivi. Puoi attivare Babelfish sul tuo cluster Amazon Aurora dalla console Amazon RDS.
Quando crei l'endpoint di AWS DMS destinazione utilizzando la AWS DMS console, l'API o i comandi CLI, specifica il motore di destinazione Amazon Aurora PostgreSQL e assegna un nome al database babelfish_db. Nella sezione Impostazione dell'endpoint aggiungi le impostazioni per configurare DatabaseMode
su Babelfish
e BabelfishDatabaseName
sul nome del database T-SQL Babelfish di destinazione.
Aggiunta delle regole di trasformazione all'attività di migrazione
Quando definisci un'attività di migrazione per una destinazione Babelfish, è necessario includere le regole di trasformazione che assicurino che DMS utilizzi le tabelle T-SQL Babelfish già create nel database di destinazione.
Innanzitutto, aggiungi all'attività di migrazione una regola di trasformazione che renda tutti i nomi delle tabelle in minuscolo. Babelfish memorizza i nomi delle tabelle create utilizzando T-SQL in lettere minuscole nel catalogo pg_class
PostgreSQL. Tuttavia, quando le tabelle SQL Server includono nomi in maiuscolo e minuscolo, DMS crea le tabelle utilizzando i tipi di dati nativi PostgreSQL anziché i tipi di dati compatibili con T-SQL. Per questo motivo, assicurati di aggiungere una regola di trasformazione che renda tutti i nomi delle tabelle in minuscolo. I nomi delle colonne non devono essere trasformati in lettere minuscole.
Successivamente, se hai utilizzato la modalità di migrazione di più database quando hai definito il cluster, aggiungi una regola di trasformazione che rinomina lo schema SQL Server originale. Assicurati di rinominare il nome dello schema SQL Server per includere il nome del database T-SQL. Ad esempio, se il nome dello schema SQL Server originale è dbo
e il nome del database T-SQL è mydb
, rinomina lo schema in mydb_dbo
utilizzando una regola di trasformazione.
Se usi la modalità di un database singolo, non è necessaria una regola di trasformazione per rinominare i nomi degli schemi. I nomi degli schemi hanno una mappatura con il database T-SQL di destinazione in Babelfish. one-to-one
La seguente regola di trasformazione di esempio rende tutti i nomi delle tabelle in minuscolo e rinomina il nome dello schema SQL Server originale da dbo
in mydb_dbo
.
{ "rules": [ { "rule-type": "transformation", "rule-id": "566251737", "rule-name": "566251737", "rule-target": "schema", "object-locator": { "schema-name": "dbo" }, "rule-action": "rename", "value": "mydb_dbo", "old-value": null }, { "rule-type": "transformation", "rule-id": "566139410", "rule-name": "566139410", "rule-target": "table", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "convert-lowercase", "value": null, "old-value": null }, { "rule-type": "selection", "rule-id": "566111704", "rule-name": "566111704", "object-locator": { "schema-name": "dbo", "table-name": "%" }, "rule-action": "include", "filters": [] } ] }
Limitazioni all'utilizzo di un endpoint di destinazione PostgreSQL con le tabelle Babelfish
Le seguenti limitazioni si applicano quando si utilizza un endpoint di destinazione PostgreSQL con tabelle Babelfish:
-
Per Modalità di preparazione della tabella di destinazione usa solo le modalità Nessuna operazione o Tronca. Non utilizzare la modalità Rilascia tabelle nella destinazione. In questa modalità, DMS crea le tabelle come tabelle PostgreSQL che T-SQL potrebbe non riconoscere.
AWS DMS non supporta il tipo di dati sql_variant.
-
Babelfish non supporta i tipi di dati
HEIRARCHYID
,GEOMETRY
eGEOGRAPHY
. Per migrare questi tipi di dati, puoi aggiungere le regole di trasformazione per cui convertire il tipo di dati inwstring(250)
. -
Babelfish supporta solo la migrazione di tipi di dati
BINARY
,VARBINARY
eIMAGE
che utilizzano il tipo di datiBYTEA
. Per le versioni precedenti di Aurora PostgreSQL, puoi utilizzare DMS per migrare queste tabelle su un endpoint di destinazione Babelfish. Non è necessario specificare la lunghezza per il tipo di datiBYTEA
, come mostrato nell'esempio seguente.[Picture] [VARBINARY](max) NULL
Modifica il tipo di dati T-SQL precedente con il tipo di dati
BYTEA
supportato da T-SQL.[Picture] BYTEA NULL
-
Per le versioni precedenti di Aurora PostgreSQL Babelfish, se si crea un'attività di migrazione per la replica continua da SQL Server a Babelfish utilizzando l'endpoint di destinazione PostgreSQL, è necessario assegnare il tipo di dati
SERIAL
a tutte le tabelle che utilizzano colonneIDENTITY
. A partire da Aurora PostgreSQL (versione 15.3/14.8 e successive) e Babelfish (versione 3.2.0 e successive), la colonna identity è supportata e non è più necessario assegnare il tipo di dati SERIAL. Per ulteriori informazioni, consulta SERIAL Usage nella sezione Sequences and Identity in SQL Server to Aurora PostgreSQL Migration Playbook. Quindi, quando crei la tabella in Babelfish, modifica la definizione della colonna come segue.[IDCol] [INT] IDENTITY(1,1) NOT NULL PRIMARY KEY
Cambia la definizione precedente come segue.
[IDCol] SERIAL PRIMARY KEY
Aurora PostgreSQL compatibile con Babelfish crea una sequenza utilizzando la configurazione predefinita e aggiunge un vincolo
NOT NULL
alla colonna. La sequenza appena creata si comporta come una sequenza normale (con incrementi di 1) e non include alcuna opzioneSERIAL
composita. -
Dopo aver migrato i dati di tabelle con le colonne
IDENTITY
o il tipo di datiSERIAL
, reimposta l'oggetto sequenza basato su PostgreSQL in base al valore massimo per la colonna. Dopo aver eseguito il pieno carico delle tabelle, usa la seguente query T-SQL per generare le istruzioni per inizializzare l'oggetto sequenza associato.DECLARE @schema_prefix NVARCHAR(200) = '' IF current_setting('babelfishpg_tsql.migration_mode') = 'multi-db' SET @schema_prefix = db_name() + '_' SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + schema_name(tables.schema_id) + '.' + tables.name + ''', ''' + columns.name + ''') ,(select max(' + columns.name + ') from ' + schema_name(tables.schema_id) + '.' + tables.name + '));' FROM sys.tables tables JOIN sys.columns columns ON tables.object_id = columns.object_id WHERE columns.is_identity = 1 UNION ALL SELECT 'SELECT setval(pg_get_serial_sequence(''' + @schema_prefix + table_schema + '.' + table_name + ''', ''' + column_name + '''),(select max(' + column_name + ') from ' + table_schema + '.' + table_name + '));' FROM information_schema.columns WHERE column_default LIKE 'nextval(%';
La query genera una serie di istruzioni SELECT da eseguire in ordine per aggiornare i valori massimi di IDENTITY e SERIAL.
-
Per le versioni di Babelfish precedenti alla 3.2, la Modalità LOB completa potrebbe causare un errore di tabella. In tal caso, crea un'attività separata per le tabelle che non sono state caricate. Utilizza quindi la Modalità LOB limitata per specificare il valore appropriato per Dimensione massima dei LOB (KB). Un'altra opzione consiste nell'impostare l'attributo di connessione dell'endpoint
ForceFullLob=True
di SQL Server. -
Per le versioni di Babelfish precedenti alla 3.2, l'esecuzione della convalida dei dati per tabelle Babelfish che non utilizzano chiavi primarie basate su numeri interi genera un messaggio che indica che non è possibile trovare una chiave univoca adatta. A partire da Aurora PostgreSQL (versione 15.3/14.8 e successive) e Babelfish (versione 3.2.0 e successive), è supportata la convalida dei dati per chiavi primarie basate su numeri non interi.
-
A causa delle differenze di precisione nel numero di cifre decimali per i secondi, DMS segnala gli errori di convalida dei dati per le tabelle Babelfish che utilizzano tipi di dati
DATETIME
. Per correggere questi errori, puoi aggiungere il seguente tipo di regola di convalida per i tipi di datiDATETIME
.{ "rule-type": "validation", "rule-id": "3", "rule-name": "3", "rule-target": "column", "object-locator": { "schema-name": "dbo", "table-name": "%", "column-name": "%", "data-type": "datetime" }, "rule-action": "override-validation-function", "source-function": "case when ${column-name} is NULL then NULL else 0 end", "target-function": "case when ${column-name} is NULL then NULL else 0 end" }