Re: MSSQL to PostgreSQL Migration

From: JP Pozzi <jpp(at)jppozzi(dot)dyndns(dot)org>
To: Holger Jakobs <holger(at)jakobs(dot)com>
Cc: pgsql-admin(at)lists(dot)postgresql(dot)org
Subject: Re: MSSQL to PostgreSQL Migration
Date: 2023-01-12 18:09:27
Message-ID: 382249592.381.1673546967170.JavaMail.zimbra@jppozzi.dyndns.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

Hello,

You can also look at Postgresql Foreign Data Wrapper (FDW) which can give access to
"foreign" tables even for MSSQL.
The transfer will be immediate as :
insert into postgres_table select * from mssql_table;

Regards

JP P

----- Mail original -----
De: "Holger Jakobs" <holger(at)jakobs(dot)com>
À: pgsql-admin(at)lists(dot)postgresql(dot)org
Envoyé: Jeudi 12 Janvier 2023 18:37:08
Objet: Re: MSSQL to PostgreSQL Migration

Am 12.01.23 um 04:21 schrieb Gurudutt Dhareshwar:
> For data you can move it using the SQL tool itself or take a BCP Out
> and then insert using the psql -d option .

Actually, bcp.exe does not do a very good job. It cannot make a
difference between an empty string and a NULL value, for instance.

If you try to export in tab-separated format
(https://www.iana.org/assignments/media-types/text/tab-separated-values)
carriage returns, newlines, tab character will all mess up the output.
And contained backslashes are not doubled as necessary for PG's copy
statement.

In case your tables aren't too large, you can export via PowerShell
keeping the differences between NULL and empty string. The way via JSON
may be a bit slow and heavy on memory, though.

### Code for Powershell

install-module sqlserver

$SqlParams = @{
  ServerInstance = 'server_name'
  UserName = 'user_name'
  Password = 'very_secret'
  Database = 'db_name'
}

$tableName = 'whatever_tablename'
(invoke-sqlcmd @SqlParams -query "Select * from $tableName" |
select-object * -excludeproperty
itemarray,table,rowerror,rowstate,haserrors |
convertto-json).replace('null', '"§n§"') | convertfrom-json | export-csv
-path "$($tableName).csv" -usequotes asneeded

### import using psql
\copy whatever_tablename from whatever_tablename.csv (format csv, header
on);

Kind Regards,

Holger

--
Holger Jakobs, Bergisch Gladbach, Tel. +49-178-9759012

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Ron 2023-01-12 22:45:05 Synthetic keys and index fillfactor
Previous Message Holger Jakobs 2023-01-12 17:37:08 Re: MSSQL to PostgreSQL Migration