Migrazione da Server a Postgre con SQL SQL AWS Schema Conversion Tool - AWS Schema Conversion Tool

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.

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 DATABASE db_name TO user_name; ALTER DATABASE db_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 tabellaEXEC.

    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