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à.
Migrazione da Server a Postgre con SQL SQL AWS Schema Conversion Tool
È possibile utilizzare il pacchetto di SQL estensione SQL Server to Postgre in. AWS SCT Questo pacchetto di estensione emula le funzioni SQL del database Server nel codice Postgre convertito. SQL Usa il pacchetto di SQL estensione SQL Server to Postgre per emulare Server Agent e SQL Server Database Mail. SQL Per ulteriori informazioni sui pacchetti di estensione, consulta Utilizzo dei pacchetti di estensione con AWS Schema Conversion Tool.
Argomenti
- Privilegi per SQL Postgre come database di destinazione
- SQLImpostazioni di conversione da server a Postgre SQL
- Conversione di partizioni SQL Server in partizioni SQL Postgre versione 10
- Considerazioni sulla migrazione
- Utilizzo di un pacchetto di AWS SCT estensione per emulare Server Agent in Postgre SQL SQL
- Utilizzo di un pacchetto di AWS SCT estensione per emulare SQL Server Database Mail in Postgre SQL
Privilegi per SQL Postgre come database di destinazione
Per utilizzare Postgre SQL come destinazione, è necessario il privilegio. AWS SCT CREATE ON DATABASE
Assicurati di concedere questo privilegio per ogni database Postgre di destinazione. SQL
Per utilizzare i sinonimi pubblici convertiti, modifica il percorso di ricerca predefinito del database in. "$user", public_synonyms, public
È possibile utilizzare il seguente esempio di codice per creare un utente del database e assegnare i privilegi.
CREATE ROLE
user_name
LOGIN PASSWORD 'your_password
'; GRANT CREATE ON DATABASEdb_name
TOuser_name
; ALTER DATABASEdb_name
SET SEARCH_PATH = "$user", public_synonyms, public;
Nell'esempio precedente, sostituisci user_name
con il nome del tuo utente. Quindi, sostituisci db_name
con il nome del database di destinazione. Infine, sostituisci your_password
con una password sicura.
In PostgreSQL, solo il proprietario dello schema o un superuser
può eliminare uno schema. Il proprietario può eliminare uno schema e tutti gli oggetti che questo schema include anche se il proprietario dello schema non possiede alcuni dei suoi oggetti.
Quando utilizzi utenti diversi per convertire e applicare schemi diversi al database di destinazione, puoi ricevere un messaggio di errore quando non AWS SCT puoi eliminare uno schema. Per evitare questo messaggio di errore, utilizza il ruolo superuser
.
SQLImpostazioni di conversione da server a Postgre SQL
Per modificare le impostazioni di SQL conversione da SQL Server a Postgre, scegli Impostazioni, quindi scegli Impostazioni di conversione. Dall'elenco in alto, scegli SQLServer, quindi scegli SQLServer — Postgre. SQL AWS SCT visualizza tutte le impostazioni disponibili per la conversione da SQL Server a SQL Postgre.
SQLLe impostazioni di SQL conversione da Server a Postgre AWS SCT includono le seguenti opzioni:
-
Per limitare il numero di commenti con azioni nel codice convertito.
Per Aggiungi commenti nel codice convertito per le azioni di gravità selezionata o superiore, scegli la gravità delle azioni. AWS SCT aggiunge commenti nel codice convertito per le azioni con la gravità selezionata o superiore.
Ad esempio, per ridurre al minimo il numero di commenti nel codice convertito, scegli Solo errori. Per includere commenti per tutti gli elementi d'azione nel codice convertito, scegli Tutti i messaggi.
-
Per consentire l'utilizzo di indici con lo stesso nome in tabelle diverse in Server. SQL
In PostgreSQL, tutti i nomi di indice utilizzati nello schema devono essere univoci. Per assicurarti che ciò AWS SCT generi nomi univoci per tutti i tuoi indici, seleziona Genera nomi univoci per gli indici.
-
Per convertire le procedure SQL Server in funzioni Postgre. SQL
La SQL versione 10 di Postgre e le precedenti non supportano le procedure. I clienti che non hanno familiarità con l'uso delle procedure in PostgreSQL, AWS SCT possono convertire le procedure in funzioni. A tale scopo, seleziona Converti procedure in funzioni.
-
Per emulare l'output di una tabella
EXEC
.Il database SQL del server di origine può memorizzare l'output di
EXEC
in una tabella. AWS SCT crea tabelle temporanee e una procedura aggiuntiva per emulare questa funzionalità. Per utilizzare questa emulazione, seleziona Crea routine aggiuntive per la gestione di set di dati aperti. -
Per definire il modello da utilizzare per i nomi degli schemi nel codice convertito. Per il modello di generazione del nome dello schema, scegliete una delle seguenti opzioni:
<source_db>— Utilizza il nome del database del SQL server come nome dello schema in SQL Postgre.
<source_schema>— Utilizza il nome dello schema SQL del server come nome dello schema in Postgre. SQL
_ <source_db><schema>— Utilizza una combinazione del database del SQL Server e dei nomi dello schema come nome dello schema in Postgre. SQL
-
Per mantenere le lettere maiuscole e minuscole dei nomi degli oggetti di origine.
Per evitare la conversione dei nomi degli oggetti in lettere minuscole, selezionate Evita la conversione in lettere minuscole per le operazioni con distinzione tra maiuscole e minuscole. Questa opzione si applica solo quando si attiva l'opzione di distinzione tra maiuscole e minuscole nel database di destinazione.
-
Per mantenere i nomi dei parametri lontani dal database di origine.
Per aggiungere virgolette doppie ai nomi dei parametri nel codice convertito, selezionate Mantieni i nomi dei parametri originali.
Conversione di partizioni SQL Server in partizioni SQL Postgre versione 10
Quando converti un database Microsoft SQL Server in Amazon Aurora Postgre SQL -Compatible Edition (Aurora Postgre) SQL o Amazon Relational Database Service SQL for Postgre (Amazon for PostgreRDS), tieni presente quanto segue. SQL
SQLIn Server, crei partizioni con funzioni di partizione. Durante la conversione da una tabella con porzioni SQL su Server a una tabella partizionata Postgre SQL versione 10, tieni presente diversi potenziali problemi:
-
SQLIl server consente di partizionare una tabella utilizzando una colonna senza vincoli. NOT NULL In tal caso, tutti i NULL valori vanno nella partizione più a sinistra. Postgre SQL non supporta valori per il partizionamento. NULL RANGE
-
SQLIl server consente di creare chiavi primarie e univoche per tabelle partizionate. Per PostgreSQL, si creano direttamente chiavi primarie o univoche per ogni partizione. Pertanto, i PRIMARY nostri UNIQUE KEY vincoli devono essere rimossi dalla tabella principale durante la migrazione a Postgre. SQL I nomi chiave risultanti assumono il formato.
<original_key_name>_<partition_number>
-
SQLIl server consente di creare vincoli di chiave esterna da e verso tabelle partizionate. Postgre SQL non supporta chiavi esterne che fanno riferimento a tabelle partizionate. Inoltre, Postgre SQL non supporta i riferimenti a chiavi esterne da una tabella partizionata a un'altra tabella.
-
SQLIl server consente di creare indici per tabelle partizionate. Per PostgreSQL, è necessario creare direttamente un indice per ogni partizione. Pertanto, gli indici devono essere rimossi dalle tabelle principali durante la migrazione a Postgre. SQL I nomi degli indici risultanti avranno il formato
<original_index_name>_<partition_number>
. SQLPostgre non supporta gli indici partizionati.
Considerazioni sulla migrazione
Alcuni aspetti da considerare durante la migrazione di uno schema SQL Server a Postgre: SQL
-
In PostgreSQL, tutti i nomi degli oggetti in uno schema devono essere unici, inclusi gli indici. I nomi degli indici devono essere univoci nello schema della tabella di base. In SQL Server, il nome di un indice può essere lo stesso per tabelle diverse.
Per garantire l'unicità dei nomi degli indici, AWS SCT offre la possibilità di generare nomi di indice univoci se i nomi degli indici non sono univoci. A questo scopo scegli l'opzione Genera nomi indici univoci nelle proprietà del progetto. Per impostazione predefinita, questa opzione è abilitata. Se questa opzione è attiva, i nomi indice univoci vengono creati utilizzando il formato IX_table_name_index_name. Se questa opzione è disattivata, i nomi indice non vengono modificati.
È possibile utilizzare un'GOTOistruzione e un'etichetta per modificare l'ordine di esecuzione delle istruzioni. Tutte SQL le istruzioni Transact- che seguono un'GOTOistruzione vengono ignorate e l'elaborazione continua dall'etichetta. GOTOle istruzioni e le etichette possono essere utilizzate ovunque all'interno di una procedura, di un batch o di un blocco di istruzioni. GOTOle istruzioni possono anche essere annidate.
Postgre SQL non utilizza istruzioni. GOTO Quando AWS SCT converte il codice che contiene un'GOTOistruzione, converte l'istruzione in modo che utilizzi un'istruzione... oBEGIN... END LOOP END LOOP Puoi trovare esempi di come AWS SCT converte GOTO le istruzioni nella tabella seguente.
SQLGOTOIstruzioni del server e istruzioni SQL Postgree convertite SQLDichiarazione del server Dichiarazione Postgres SQL BEGIN .... statement1; .... GOTO label1; statement2; .... label1: Statement3; .... END
BEGIN label1: BEGIN .... statement1; .... EXIT label1; statement2; .... END; Statement3; .... END
BEGIN .... statement1; .... label1: statement2; .... GOTO label1; statement3; .... statement4; .... END
BEGIN .... statement1; .... label1: LOOP statement2; .... CONTINUE label1; EXIT label1; END LOOP; statement3; .... statement4; .... END
BEGIN .... statement1; .... label1: statement2; .... statement3; .... statement4; .... END
BEGIN .... statement1; .... label1: BEGIN statement2; .... statement3; .... statement4; .... END; END
-
Postgre SQL non supporta una dichiarazione. MERGE AWS SCT emula il comportamento di una MERGE dichiarazione nei seguenti modi:
-
Di INSERT ON CONFLICT construction.
-
Utilizzando l'UPDATEFROMDMListruzione, ad esempio MERGE senza una WHEN NOT MATCHED clausola.
-
UtilizzandoCURSOR, ad esempio con una DELETE clausola MERGE with o utilizzando un'istruzione di condizione MERGE ON complessa.
-
AWS SCT può aggiungere trigger di database all'albero degli oggetti quando Amazon RDS è l'obiettivo.
AWS SCT può aggiungere trigger a livello di server all'albero degli oggetti quando Amazon RDS è la destinazione.
SQLIl server crea e gestisce
deleted
automaticamente le tabelle.inserted
È possibile utilizzare queste tabelle temporanee residenti in memoria per testare gli effetti di determinate modifiche ai dati e impostare le condizioni per DML le azioni di attivazione. AWS SCT può convertire l'utilizzo di queste tabelle all'interno DML di istruzioni trigger.AWS SCT può aggiungere server collegati all'albero degli oggetti quando Amazon RDS è l'obiettivo.
Durante la migrazione da Microsoft SQL Server a PostgreSQL, la SNAME funzione SUSER _ integrata viene convertita come segue:
SUSER_ SNAME — Restituisce il nome di accesso associato a un numero di identificazione di sicurezza (). SID
SUSER_ SNAME (<server_user_sid>) — Non supportato.
SUSER_ SNAME () CURRENT _ USER — Restituisce il nome utente del contesto di esecuzione corrente.
SUSER_ SNAME (NULL) — RestituisceNULL.
La conversione di funzioni valutate a livello di tabella è supportata. Le funzioni valutate a livello di tabella restituiscono una tabella e possono prendere il posto di una tabella in una query.
-
PATINDEXrestituisce la posizione iniziale della prima occorrenza di un pattern in un'espressione specificata su tutti i tipi di dati di testo e caratteri validi. Restituisce zeri se il modello non viene trovato. <pattern character><expression character varying>Durante la conversione da SQL Server ad Amazon RDS for PostgreSQL, AWS SCT sostituisce il codice dell'applicazione utilizzato PATINDEX con aws_sqlserver_ext.patindex (,).
-
In SQL Server, un tipo di tabella definito dall'utente è un tipo che rappresenta la definizione di una struttura di tabella. Utilizza un tipo di tabella definito dall'utente per dichiarare i parametri del valore di tabella per le stored procedure o le funzioni. È inoltre possibile utilizzare un tipo di tabella definito dall'utente per dichiarare le variabili di tabella che si desidera utilizzare in un batch o nel corpo di una procedura o funzione memorizzata. AWS SCT ho emulato questo tipo in Postgre SQL creando una tabella temporanea.
Durante la conversione da SQL Server a PostgreSQL, AWS SCT converte gli oggetti del sistema SQL Server in oggetti riconoscibili in Postgre. SQL La tabella seguente mostra il modo in cui vengono convertiti gli oggetti di sistema.
SQLCasi d'uso di MS Server | Sostituzione Postgree SQL |
---|---|
SYS.SCHEMAS |
AWS_SQLSERVER_EXT.SYS_SCHEMAS |
SYS.TABLES |
AWS_SQLSERVER_EXT.SYS_TABLES |
SYS.VIEWS |
AWS_SQLSERVER_EXT.SYS_VIEWS |
SYS.ALL_VIEWS |
AWS_SQLSERVER_EXT.SYS_ALL_VIEWS |
SYS.TYPES |
AWS_SQLSERVER_EXT.SYS_TYPES |
SYS.COLUMNS |
AWS_SQLSERVER_EXT.SYS_COLUMNS |
SYS.ALL_COLUMNS |
AWS_SQLSERVER_EXT.SYS_ALL_COLUMNS |
SYS.FOREIGN_KEYS |
AWS_SQLSERVER_EXT.SYS_FOREIGN_KEYS |
SYS.SYSFOREIGNKEYS |
AWS_SQLSERVER_EXT.SYS_SYSFOREIGNKEYS |
SYS.FOREIGN_KEY_COLUMNS |
AWS_SQLSERVER_EXT.SYS_FOREIGN_KEY_COLUMNS |
SYS.KEY_CONSTRAINTS |
AWS_SQLSERVER_EXT.SYS_KEY_CONSTRAINTS |
SYS.IDENTITY_COLUMNS |
AWS_SQLSERVER_EXT.SYS_IDENTITY_COLUMNS |
SYS.PROCEDURES |
AWS_SQLSERVER_EXT.SYS_PROCEDURES |
SYS.INDEXES |
AWS_SQLSERVER_EXT.SYS_INDEXES |
SYS.SYSINDEXES |
AWS_SQLSERVER_EXT.SYS_SYSINDEXES |
SYS.OBJECTS |
AWS_SQLSERVER_EXT.SYS_OBJECTS |
SYS.ALL_OBJECTS |
AWS_SQLSERVER_EXT.SYS_ALL_OBJECTS |
SYS.SYSOBJECTS |
AWS_SQLSERVER_EXT.SYS_SYSOBJECTS |
SYS.SQL_MODULES |
AWS_SQLSERVER_EXT.SYS_SQL_MODULES |
SYS.DATABASES |
AWS_SQLSERVER_EXT.SYS_DATABASES |
INFORMATION_SCHEMA.SCHEMATA |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_SCHEMATA |
INFORMATION_SCHEMA.VIEWS |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_VIEWS |
INFORMATION_SCHEMA.TABLES |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_TABLES |
INFORMATION_SCHEMA.COLUMNS |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_COLUMNS |
INFORMATION_SCHEMA.CHECK_CONSTRAINTS |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CHECK_CONSTRAINTS |
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_REFERENTIAL_CONSTRAINTS |
INFORMATION_SCHEMA.TABLE_CONSTRAINTS |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_TABLE_CONSTRAINTS |
INFORMATION_SCHEMA.KEY_COLUMN_USAGE |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_KEY_COLUMN_USAGE |
INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CONSTRAINT_TABLE_USAGE |
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CONSTRAINT_COLUMN_USAGE |
INFORMATION_SCHEMA.ROUTINES |
AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_ROUTINES |
SYS.SYSPROCESSES |
AWS_SQLSERVER_EXT.SYS_SYSPROCESSES |
sys.system_objects |
AWS_SQLSERVER_EXT.SYS_SYSTEM_OBJECTS |