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?
- 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.
- 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.
- Licenze open source flessibili e facile disponibilità da provider di cloud pubblico come AWS, Google cloud ecc.
- 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 |
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.
-
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.
-
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:
- Converte uno schema SQL Server in uno schema PostgreSQL
- 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.