PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Migrazione da MSSQL a PostgreSQL:cosa dovresti sapere

Come forse saprai, Microsoft SQL Server è un RDBMS molto popolare con licenze altamente restrittive e costi di proprietà elevati se il database è di dimensioni significative o viene utilizzato da un numero significativo di client. Fornisce un'interfaccia molto intuitiva e facile da imparare. Ciò ha portato a un'ampia base di utenti installati.

PostgreSQL è il database open source più avanzato al mondo. La comunità di PostgreSQL è molto forte e migliora continuamente le funzionalità esistenti e implementa nuove funzionalità. Secondo il ranking di popolarità di db-engine, PostgreSQL è stato il DBMS dell'anno 2017.

Perché migrare da MS SQL Server a PostgreSQL?

  1. MS SQL Server è un database proprietario di Microsoft, mentre PostgreSQL è sviluppato e gestito da una comunità globale di sviluppatori open source. Se il costo è un problema, allora dovresti assolutamente usare PostgreSQL. Puoi controllare i prezzi qui.
  2. PostgreSQL è un motore di database multipiattaforma ed è disponibile per Windows, Mac, Solaris, FreeBSD e Linux mentre SQL Server funziona solo su sistema operativo Windows. Come forse saprai, PostgreSQL è open source e completamente gratuito mentre il costo di MSSQL Server dipende dal numero di utenti e dalle dimensioni del database.
  3. Licenze open source flessibili e facile disponibilità da provider di cloud pubblico come AWS, Google cloud ecc.
  4. Trai vantaggio dai componenti aggiuntivi open source per migliorare le prestazioni.

Cosa dovresti sapere

Sebbene sia il database Microsoft SQL Server che il database PostgreSQL siano compatibili con ANSI-SQL, ci sono ancora differenze tra la sintassi SQL, i tipi di dati, la distinzione tra maiuscole e minuscole e il trasferimento dei dati non è così banale.

Prima della migrazione, comprendere le differenze tra MSSQL e PostgreSQL. Ci sono molte funzionalità in entrambi i database, quindi dovresti conoscere il comportamento di tali funzionalità/funzioni in MSSQL e PostgreSQL. Verifica alcune importanti differenze che dovresti conoscere prima della migrazione.

Mappatura del tipo di dati

Alcuni dei tipi di dati di MSSQL non corrispondono direttamente ai tipi di dati di PostgreSQL, quindi è necessario cambiarli nel tipo di dati PostgreSQL corrispondente.

Si prega di controllare la tabella sottostante.

Microsoft SQL Server PostgreSQL
GRANDE Intero a 64 bit GRANDE
BINARIO(n) Stringa di byte a lunghezza fissa BYTEA
BIT 1, 0 o NULL BOOLEANO
CHAR(n) Stringa di caratteri a lunghezza fissa, 1 <=n <=8000 CHAR(n)
VARCHAR(n) Stringa di caratteri di lunghezza variabile, 1 <=n <=8000 VARCHAR(n)
VARCHAR(max) Stringa di caratteri di lunghezza variabile, <=2 GB TESTO
VARBINARY(n) Stringa byte di lunghezza variabile, 1 <=n <=8000 BYTEA
VARBINARY(max) Stringa di byte di lunghezza variabile, <=2 GB BYTEA
NVARCHAR(n) Stringa Unicode UCS-2 a lunghezza variabile VARCHAR(n)
NVARCHAR(max) Dati Unicode UCS-2 a lunghezza variabile, <=2 GB TESTO
TESTO Dati di caratteri a lunghezza variabile, <=2 GB TESTO
NEXT Dati Unicode UCS-2 a lunghezza variabile, <=2 GB TESTO
DOPPIA PRECISIONE Numero in virgola mobile a doppia precisione DOPPIA PRECISIONE
FLOAT(p) Numero in virgola mobile DOPPIA PRECISIONE
INTERO Intero a 32 bit INTERO
NUMERICO(p,s) Numero punto fisso NUMERICO(p,s)
DATA La data include anno, mese e giorno DATA
DATETIME Data e ora con frazione TIMESTAMP(3)
DATETIME2(p) Data e ora con frazione TIMESTAMP(n)
DATETIMEOFFSET(p) Data e ora con frazione e fuso orario TIMESTAMP(p) CON FUSO ORARIO
SMALLDATETIME Data e ora TIMESTAMP(0)
TINYINT Intero senza segno a 8 bit, da 0 a 255 SMALLINT
IDENTIFICATORE UNICO Dati GUID(UUID) a 16 byte CHAR(16)
ROWVERSION Dati binari aggiornati automaticamente BYTEA
PICCOLISOLDI Importo in valuta a 32 bit SOLDI
IMMAGINE Dati binari a lunghezza variabile, <=2 GB BYTEA
Scarica il whitepaper oggi Gestione e automazione di PostgreSQL con ClusterControlScopri cosa devi sapere per distribuire, monitorare, gestire e ridimensionare PostgreSQLScarica il whitepaper

Incompatibilità in MS SQL Server e PostgreSQL

Ci sono molte incompatibilità presenti in MS SQL Server e PostgreSQL, puoi vederne alcune qui. Puoi automatizzarli creando estensioni in modo da poter utilizzare la funzione di MS SQL Server così com'è in PostgreSQL e risparmiare tempo.

PARTE DI DATA

DATEPART deve essere sostituito da DATE_PART in PostgreSQL.

Esempio

MS SQL:

DATEPART( datepart , date )

PostgreSQL:

date_part( text , timestamp )
date_part( text , interval )

NONULLO

La funzione ISNULL deve essere sostituita dalla funzione COALESCE in PostgreSQL.

Esempio

Server MS SQL:

ISNULL(exp, replacement)

PostgreSQL:

COALESCE(exp, replacement)

SPAZIO

La funzione SPAZIO in MS SQL Server deve essere sostituita dalla funzione RIPETI in PostgreSQL.

Esempio

Server MS SQL:

SPACE($n)

Dove $n è il numero di spazi da restituire.

PostgreSQL:

REPEAT(‘ ’, $n)

DATA AGGIUNTA

PostgreSQL non fornisce la funzione DATEADD simile a MS SQL Server, puoi usare l'aritmetica datetime con valori letterali di intervallo per ottenere gli stessi risultati.

Esempio

Server MS SQL:

--Add 2 day to the current date
SELECT DATEADD(day, 2, GETDATE());

PostgreSQL:

--Add 2 day to the current date
SELECT CURRENT_DATE + INTERVAL ‘2 day’;

Concatenazione di stringhe

MS SQL Server utilizza "+" per la concatenazione di stringhe mentre PostgreSQL utilizza "||" per lo stesso.

Esempio

Server MS SQL:

SELECT FirstName + LastName FROM employee;

PostgreSQL:

SELECT FirstName || LastName FROM employee;

CARINDICE

C'è la funzione CHARINDEX in PostgreSQL. Puoi sostituire questa funzione con la funzione POSIZIONE equivalente a PostgreSQL.

Esempio

Server MS SQL:

SELECT CHARINDEX('our', 'resource');

PostgreSQL:

SELECT POSITION('our' in 'resource');

GETDATE

La funzione GETDATE restituisce la data e l'ora correnti. Non esiste una funzione GETDATE in PostgreSQL, ma esiste la funzione NOW() per lo stesso scopo. Se sono presenti più occorrenze della funzione GETDATE, è possibile automatizzarle utilizzando l'estensione. Controlla come creare moduli usando l'estensione.

Esempio

Server MS SQL:

SELECT GETDATE();

PostgreSQL:

SELECT NOW();

Strumenti

È possibile utilizzare alcuni strumenti per migrare il database di MS SQL Server a PostgreSQL. Si prega di testare lo strumento prima di usarlo.

  1. Gloader

    È possibile utilizzare lo strumento pgloader per migrare il database MS SQL a PostgreSQL. I comandi nel pgloader caricano i dati dal database MS SQL. Pgloader supporta il rilevamento automatico dello schema, inclusa la creazione degli indici, la chiave primaria e i vincoli delle chiavi esterne.

    Pgloader fornisce varie regole di casting che possono convertire il tipo di dati MS SQL in un tipo di dati PostgreSQL.

  2. Sqlserver2pgsql

    Questo è un altro strumento di migrazione open source per convertire il database di Microsoft SQL Server in un database PostgreSQL, il più automaticamente possibile. Sqlserver2pgsql è scritto in Perl.

    Lo strumento Sqlserver2pgsql fa due cose:

    1. Converte uno schema SQL Server in uno schema PostgreSQL
    2. Può produrre un jib Pentaho Data Integrator (Kettle) per migrare tutti i dati da SQL Server a PostgreSQL. Questa è una parte opzionale.

Test

Il test dell'applicazione e del database migrato è molto importante perché alcune delle funzioni sono le stesse in entrambi i database, tuttavia il comportamento è diverso.

È necessario verificare alcuni scenari comuni:

  • Verifica se tutti gli oggetti del database sono stati convertiti correttamente o meno.
  • Verifica che il comportamento di tutte le funzioni in DML funzioni correttamente o meno.
  • Carica i dati di esempio in entrambi i database e controlla il risultato di tutte le query DML in entrambi i database. Il risultato di tutti gli SQL dovrebbe essere lo stesso.
  • Verifica le prestazioni del DML e miglioralo se necessario.