Langsung ke konten
Beranda IntoSQL

Konversi PostgreSQL ke SQL Server

Letakkan dump plain dari pg_dump atau pg_dumpall, sebagai .sql atau .sql.gz, lalu unduh skrip SQL Server dengan tabel, kunci, indeks, dan data yang sama. Setiap nilai yang tidak bisa disimpan SQL Server apa adanya, dan setiap objek yang tidak didukungnya, dicantumkan di laporan.

File Anda
sqlshop_2024_postgres.sqlFile contoh, 6,2 kB
Database Anda

18 baris dikonversi, 2 perbaikan, tidak ada yang ditolak

Tampilkan

Tabel di shop_2024_postgres.sqlDump PostgreSQL 18.6 · ditulis oleh pg_dump · utf8mb4

  • customers8 baris1
    8 kolom
    idint not null
    namenvarchar(max) not null
    emailnvarchar(450) not null
    countrynvarchar(2) not null
    is_activebit not null
    tagsnvarchar(max) not null
    signed_update
    created_atdatetimeoffset(6) not null
  • orders10 baris1
    10 kolom
    idint not null
    customer_idint not null
    statusnvarchar(9) not null
    totaldecimal(10,2) not null
    itemssmallint not null
    ordered_atdatetime2(6) not null
    shipped_atdatetime2(6)
    notenvarchar(max)
    detailsnvarchar(max)
    deliverynvarchar(100)

Tidak dikonversi

  • View paid_orders

Setiap database menulis objek ini dalam bahasanya sendiri. Tulis ulang untuk SQL Server.

-- Written by IntoSQL from a PostgreSQL dump. Load it with: sqlcmd -b -f 65001 -d <database> -i <file>
SET NOCOUNT ON;
SET ANSI_NULLS ON;
SET QUOTED_IDENTIFIER ON;
SET ANSI_PADDING ON;
SET ANSI_WARNINGS ON;
SET ARITHABORT ON;
SET CONCAT_NULL_YIELDS_NULL ON;
SET NUMERIC_ROUNDABORT OFF;
GO

CREATE TABLE [dbo].[customers] (
    [id] int IDENTITY(1001, 1) NOT NULL,
    [name] nvarchar(max) COLLATE Latin1_General_100_BIN2 NOT NULL,
    [email] nvarchar(450) COLLATE Latin1_General_100_BIN2 NOT NULL,
    [country] nvarchar(2) COLLATE Latin1_General_100_BIN2 DEFAULT N'US' NOT NULL,
    [is_active] bit DEFAULT 1 NOT NULL,
    [tags] nvarchar(max) COLLATE Latin1_General_100_BIN2 NOT NULL,
    [signed_up] date NULL,
    [created_at] datetimeoffset(6) DEFAULT SYSDATETIMEOFFSET() NOT NULL,
    CONSTRAINT [PK_customers] PRIMARY KEY ([id])
);
GO

CREATE TABLE [dbo].[orders] (
    [id] int IDENTITY(5001, 1) NOT NULL,
    [customer_id] int NOT NULL,
    [status] nvarchar(9) COLLATE Latin1_General_100_BIN2 DEFAULT N'pending' NOT NULL,
    [total] decimal(10,2) NOT NULL,
    [items] smallint DEFAULT 1 NOT NULL,
    [ordered_at] datetime2(6) NOT NULL,
    [shipped_at] datetime2(6) NULL,
    [note] nvarchar(max) COLLATE Latin1_General_100_BIN2 NULL,
    [details] nvarchar(max) COLLATE Latin1_General_100_BIN2 NULL,
    [delivery] nvarchar(100) COLLATE Latin1_General_100_BIN2 NULL,
    CONSTRAINT [CK_orders_status] CHECK ([status] IN (N'pending', N'paid', N'shipped', N'cancelled')),
    CONSTRAINT [orders_total_check] CHECK ([total] >= (0)),
    CONSTRAINT [PK_orders] PRIMARY KEY ([id])
);
GO

SET IDENTITY_INSERT [dbo].[customers] ON;
INSERT INTO [dbo].[customers] ([id], [name], [email], [country], [is_active], [tags], [signed_up], [created_at]) VALUES
(1,N'Ana Martínez',N'ana@example.com',N'MX',1,N'["vip"]','2023-01-15','2023-01-15 10:24:00+00:00'),
(2,N'Zoë Müller',N'zoe@example.de',N'DE',1,N'[]','2023-02-03','2023-02-03 08:11:42+00:00'),
(3,N'José Peña',N'jose@example.es',N'ES',0,N'["wholesale","late payer"]','2023-03-21','2023-03-21 19:05:17+00:00'),
(4,N'李雷',N'lilei@example.cn',N'CN',1,N'[]','2023-05-09','2023-05-09 02:40:00+00:00'),
(5,N'Noah O''Brien',N'noah@example.ie',N'IE',1,N'[]',NULL,'2023-06-30 14:00:00+00:00'),
(6,N'Amélie Laurent',N'amelie@example.fr',N'FR',1,N'["vip"]','2024-01-02','2024-01-02 09:30:00+00:00'),
(7,N'Ravi Patel',N'ravi@example.in',N'IN',0,N'[]','2024-02-29','2024-02-29 23:59:59+00:00'),
(8,N'Sofia Rossi 🌻',N'sofia@example.it',N'IT',1,N'[]','2024-04-12','2024-04-12 12:12:12+00:00');
SET IDENTITY_INSERT [dbo].[customers] OFF;
GO
SET IDENTITY_INSERT [dbo].[orders] ON;
INSERT INTO [dbo].[orders] ([id], [customer_id], [status], [total], [items], [ordered_at], [shipped_at], [note], [details], [delivery]) VALUES
(1,1,N'shipped',129.90,3,'2024-03-01 10:00:00','2024-03-02 16:30:00',NULL,N'{"gift": false}',N'1 day 06:30:00'),
(2,2,N'paid',54.00,1,'2024-03-02 11:15:00',NULL,N'Gift wrap 🎁',N'{"gift": true, "wrap": "red"}',NULL),
(3,1,N'cancelled',12.50,1,'2024-03-03 09:45:00',NULL,N'Customer changed their mind',NULL,NULL),
(4,4,N'shipped',980.00,12,'2024-03-05 02:10:00','2024-03-07 08:00:00',N'请小心轻放',N'{"fragile": true}',N'2 days 05:50:00'),
(5,5,N'pending',45.75,2,'2024-03-08 17:20:00',NULL,N'Leave at the door; ring twice',NULL,NULL),
(6,6,N'shipped',310.40,5,'2024-03-10 13:00:00','2024-03-11 09:00:00',N'Fragile: "glass"',N'{"fragile": true}',N'20:00:00'),
(7,8,N'paid',76.20,2,'2024-03-11 18:45:00',NULL,NULL,NULL,NULL),
(8,2,N'shipped',19.99,1,'2024-03-12 08:00:00',NULL,N'Shipped date set to infinity by an old import',NULL,NULL),
(9,3,N'shipped',64.00,2,'2024-03-14 15:30:00','2024-03-15 10:00:00',N'Two parcels',N'{"parcels": [1, 2]}',N'18:30:00'),
(10,7,N'paid',1499.00,1,'2024-03-15 21:05:00',NULL,N'C:\Users\ravi\invoice.pdf',NULL,NULL);
SET IDENTITY_INSERT [dbo].[orders] OFF;
GO

-- Indexes, foreign keys, counters and triggers, after the rows.
CREATE UNIQUE INDEX [customers_email_key] ON [dbo].[customers] ([email]);
CREATE INDEX [idx_orders_customer] ON [dbo].[orders] ([customer_id]);
CREATE INDEX [idx_orders_status_date] ON [dbo].[orders] ([status], [ordered_at]);
ALTER TABLE [dbo].[orders] WITH NOCHECK ADD CONSTRAINT [orders_customer_id_fkey] FOREIGN KEY ([customer_id]) REFERENCES [dbo].[customers] ([id]);
BEGIN TRY ALTER TABLE [dbo].[orders] WITH CHECK CHECK CONSTRAINT [orders_customer_id_fkey]; END TRY BEGIN CATCH PRINT N'Foreign key ' + N'[orders_customer_id_fkey]' + N' has rows without a parent: it stays unchecked, and new rows are checked.'; END CATCH;
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[customers]); IF @next IS NOT NULL BEGIN IF @next < 1000 SET @next = 1000; DBCC CHECKIDENT (N'[dbo].[customers]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
EXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'People who bought at least once', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'customers';
DECLARE @next decimal(38,0) = (SELECT MAX([id]) FROM [dbo].[orders]); IF @next IS NOT NULL BEGIN IF @next < 5000 SET @next = 5000; DBCC CHECKIDENT (N'[dbo].[orders]', RESEED, @next) WITH NO_INFOMSGS; END;
GO
GO

Perbaikan

  1. "tags" di customers adalah text[], yang tidak ada di SQL Server, jadi menjadi nvarchar(max) dengan nilai yang sama.
  2. "delivery" di orders adalah interval, yang tidak ada di SQL Server, jadi menjadi nvarchar(100) dengan nilai yang sama.

Perlu diperiksa

  • 1 view, trigger, rutin, atau event tidak dikonversi; laporan mencantumkan masing-masing. Buat ulang secara manual di SQL Server.
  • Default "tags" di customers tidak bisa ditulis untuk SQL Server (a value its type can't hold), jadi kolom itu tanpa default. Tambahkan default secara manual jika baris baru memerlukannya.
  • Indeks idx_orders_details pada orders memakai ekspresi yang tidak bisa ditulis untuk SQL Server (an index on an expression), jadi tidak dibuat. Buat indeks secara manual jika kueri memerlukannya.
  • 1 nilai di "shipped_at" dari orders adalah tanggal yang tidak bisa disimpan SQL Server, misalnya infinity, jadi menjadi NULL. SQL Server menyimpan tahun 1 sampai 9999 tanpa infinity; ganti tanggal itu di sumber jika penting.

File Anda dikonversi di komputer ini dan tidak pernah diunggah.

Contoh lain:

Yang berubah dari PostgreSQL ke SQL Server

Setiap baris adalah aturan yang diterapkan konverter, beserta baris laporan yang ditulisnya saat aturan itu mengubah sesuatu di data Anda.

  • boolean

    bit

    bit menyimpan true sebagai 1 dan false sebagai 0.

  • varchar(n), char(n), text

    nvarchar(n); text sebagai nvarchar(max), atau nvarchar(450) jika dipakai key dan setiap nilai muat

    nvarchar memuat setiap karakter. SQL Server tidak bisa mengindeks nvarchar(max), jadi teks dalam key diberi ukuran yang muat untuk key.

  • text comparison

    persis (Latin1_General_100_BIN2); citext mengabaikan huruf besar dan kecil (Latin1_General_100_CI_AS_SC)

    Collation umum SQL Server mengabaikan huruf besar dan kecil, teks PostgreSQL tidak, jadi setiap kolom menyebutkan cara membandingkannya dan kunci unik tetap membedakan baris yang sama.

  • numeric(p,s) past 38 digits; numeric without a precision

    nvarchar; decimal(p,s) sesuai nilainya jika muat dalam 38 digit

    decimal di SQL Server memuat 38 digit. numeric tanpa presisi mendapat decimal tersempit yang memuat nilainya; angka yang lebih lebar disimpan sebagai teks agar setiap digit tetap persis.

    Baris laporan: decimal_as_text

  • money

    decimal(19,2)

    money di SQL Server lebih kecil daripada di PostgreSQL dan punya empat desimal; decimal(19,2) memuat setiap jumlah, tanpa simbol mata uang dari locale server.

    Baris laporan: type_replaced

  • interval

    nvarchar(100) berisi teks PostgreSQL

    SQL Server tidak punya tipe interval; teksnya mempertahankan setiap bagian.

    Baris laporan: type_replaced

  • arrays (integer[], text[]...)

    nvarchar(max) berisi array JSON

    SQL Server tidak punya array. Array JSON mempertahankan setiap elemen dan NULL, dan OPENJSON membacanya.

    Baris laporan: type_replaced

  • ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension types

    nvarchar(max) berisi teks PostgreSQL

    SQL Server tidak punya tipe yang setara, jadi setiap nilai mempertahankan teks yang ditulis PostgreSQL.

    Baris laporan: type_replaced

  • json, jsonb

    nvarchar(max)

    Fungsi JSON SQL Server membaca JSON dari teks.

  • timestamp

    datetime2

    timestamp tanpa zona waktu adalah pembacaan jam dinding, seperti datetime2.

  • timestamp with time zone

    datetimeoffset dalam UTC

    datetimeoffset mempertahankan momen; setiap nilai ditulis dalam UTC, momen yang sama apa pun selisih yang ditulis dump.

  • time with 24:00:00 in it

    nvarchar(17)

    time di SQL Server berakhir pada 23:59:59.9999999, jadi kolom yang berisi 24:00:00 mempertahankan teksnya.

    Baris laporan: time_as_interval

  • infinity, -infinity and BC dates

    NULL

    SQL Server menyimpan tahun 1 sampai 9999 tanpa infinity. Nilai itu menjadi NULL dan laporan menghitungnya.

    Baris laporan: date_out_of_range

  • NaN and Infinity in numeric, real and double precision

    NULL

    Angka di SQL Server tidak punya NaN atau Infinity, jadi nilai itu menjadi NULL dan laporan menghitungnya.

    Baris laporan: invalid_value_null

  • NOT NULL columns with values that become NULL

    NOT NULL dihapus

    Kolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.

    Baris laporan: not_null_relaxed

  • enum types

    nvarchar dengan CHECK labelnya

    Teks dengan CHECK mempertahankan nilai yang sama.

  • enum columns holding values outside their labels

    nvarchar tanpa CHECK

    Nilai yang tidak ada di label akan gagal di CHECK, jadi CHECK tidak dibuat.

    Baris laporan: enum_check_skipped

  • uuid, inet, cidr, macaddr

    uniqueidentifier; alamat sebagai nvarchar

    uniqueidentifier adalah UUID di SQL Server; alamat disimpan sebagai teks.

  • bytea

    varbinary(max)

    Byte tetap byte.

  • bit(n), bit varying

    bit untuk satu bit; bigint hingga 63 bit; digit teks jika lebih

    Satu bit berarti ya atau tidak; string bit yang lebih panjang disimpan sebagai angka yang dibentuk bit-bitnya.

  • oid, xid, cid

    bigint dengan CHECK bahwa nilainya tidak negatif

    bigint memuat setiap nilai.

  • serial, identity

    IDENTITY, berlanjut setelah id tertinggi

    Id yang disalin dimuat dengan IDENTITY_INSERT, dan penghitung berlanjut setelah id tertinggi atau nilai berikutnya dari sequence, mana yang lebih tinggi.

  • a second serial or identity column in a table

    bilangan bulat biasa

    SQL Server menghitung satu kolom IDENTITY per tabel; kolom lain mempertahankan nilainya tanpa penghitung.

    Baris laporan: counter_dropped

  • sequences not owned by a column

    CREATE SEQUENCE ... AS bigint, dengan nilai berikutnya

    SQL Server punya sequence dengan opsi yang sama; masing-masing berlanjut dari posisi terakhir di dump.

  • generated columns

    kolom computed, PERSISTED jika sumber menyimpannya

    SQL Server menghitungnya dengan dua cara yang sama.

  • generated columns with functions SQL Server lacks

    kolom biasa berisi nilainya

    Rumus yang tidak bisa ditulis untuk SQL Server menyisakan kolom biasa berisi nilai dari dump dan satu baris laporan.

    Baris laporan: generated_not_translated

  • defaults with functions SQL Server lacks, and defaults from a sequence

    tanpa default

    Default yang tidak bisa ditulis untuk SQL Server dihilangkan dan dilaporkan.

    Baris laporan: default_not_translated

  • CHECK constraints

    diterjemahkan, langsung di CREATE TABLE

    CHECK di dalam tabel diuji saat setiap baris dimuat.

  • CHECK constraints with functions SQL Server lacks

    tidak dibuat

    CHECK yang tidak bisa ditulis untuk SQL Server dihilangkan dan dilaporkan.

    Baris laporan: check_skipped

  • CHECK ... NOT VALID

    tidak dibuat

    PostgreSQL tidak pernah memeriksa baris yang sudah ada sebelumnya, jadi baris itu bisa melanggarnya.

    Baris laporan: check_not_valid

  • gin, gist, brin and hash indexes, partial and expression indexes, and indexes on text that doesn't fit a key

    tidak dibuat

    SQL Server mengindeks kolom, bukan ekspresi, dan bukan nvarchar(max).

    Baris laporan: index_skipped

  • foreign keys

    setelah data WITH NOCHECK, lalu diperiksa dengan peringatan untuk baris tanpa induk

    Key dibuat setelah baris dan diperiksa terakhir; baris tanpa induk membuatnya tetap tidak diperiksa dengan peringatan, bukan menghentikan pemuatan.

  • ON DELETE or ON UPDATE that cascades in a cycle or along a second path

    NO ACTION

    SQL Server menolak cascade yang bisa mencapai satu tabel dua kali; PostgreSQL mengizinkannya.

    Baris laporan: foreign_key_action_dropped

  • foreign keys to tables the dump doesn't create

    tidak dibuat

    Key tidak bisa merujuk ke tabel yang tidak ada.

    Baris laporan: foreign_key_skipped

  • partitioned tables

    satu tabel dengan baris dari setiap partisi

    Barisnya sama; partisi ulang tabel di SQL Server jika diperlukan.

    Baris laporan: partitions_dropped

  • views, functions, procedures, triggers, rules, policies, extensions and types

    dicantumkan di laporan

    Kodenya ditulis dalam bahasa PostgreSQL, jadi dicantumkan agar Anda buat ulang.

    Baris laporan: not_converted_objects

  • dumps without CREATE TABLE (--data-only)

    tipe dibaca dari nilainya

    Dump yang hanya berisi data hanya punya baris, jadi tipenya berasal dari nilainya.

    Baris laporan: no_schema

  • expressions in INSERT values

    NULL

    Konverter yang tidak menjalankan database tidak bisa mengevaluasinya.

    Baris laporan: expression_value

  • types IntoSQL doesn't know

    nvarchar(max)

    Teks memuat nilai apa pun; ubah tipenya setelah pemuatan.

    Baris laporan: unknown_type

  • text that isn't valid in its encoding

    byte yang rusak menjadi karakter pengganti

    nvarchar memuat teks Unicode.

    Baris laporan: invalid_utf8_replaced

  • text decoded twice (ñ)

    disalin apa adanya

    Dump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.

    Baris laporan: mojibake_suspected

Di PostgreSQLDi SQL ServerBaris laporan
booleanbitbit menyimpan true sebagai 1 dan false sebagai 0.
varchar(n), char(n), textnvarchar(n); text sebagai nvarchar(max), atau nvarchar(450) jika dipakai key dan setiap nilai muatnvarchar memuat setiap karakter. SQL Server tidak bisa mengindeks nvarchar(max), jadi teks dalam key diberi ukuran yang muat untuk key.
text comparisonpersis (Latin1_General_100_BIN2); citext mengabaikan huruf besar dan kecil (Latin1_General_100_CI_AS_SC)Collation umum SQL Server mengabaikan huruf besar dan kecil, teks PostgreSQL tidak, jadi setiap kolom menyebutkan cara membandingkannya dan kunci unik tetap membedakan baris yang sama.
numeric(p,s) past 38 digits; numeric without a precisionnvarchar; decimal(p,s) sesuai nilainya jika muat dalam 38 digitdecimal di SQL Server memuat 38 digit. numeric tanpa presisi mendapat decimal tersempit yang memuat nilainya; angka yang lebih lebar disimpan sebagai teks agar setiap digit tetap persis.decimal_as_text
moneydecimal(19,2)money di SQL Server lebih kecil daripada di PostgreSQL dan punya empat desimal; decimal(19,2) memuat setiap jumlah, tanpa simbol mata uang dari locale server.type_replaced
intervalnvarchar(100) berisi teks PostgreSQLSQL Server tidak punya tipe interval; teksnya mempertahankan setiap bagian.type_replaced
arrays (integer[], text[]...)nvarchar(max) berisi array JSONSQL Server tidak punya array. Array JSON mempertahankan setiap elemen dan NULL, dan OPENJSON membacanya.type_replaced
ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension typesnvarchar(max) berisi teks PostgreSQLSQL Server tidak punya tipe yang setara, jadi setiap nilai mempertahankan teks yang ditulis PostgreSQL.type_replaced
json, jsonbnvarchar(max)Fungsi JSON SQL Server membaca JSON dari teks.
timestampdatetime2timestamp tanpa zona waktu adalah pembacaan jam dinding, seperti datetime2.
timestamp with time zonedatetimeoffset dalam UTCdatetimeoffset mempertahankan momen; setiap nilai ditulis dalam UTC, momen yang sama apa pun selisih yang ditulis dump.
time with 24:00:00 in itnvarchar(17)time di SQL Server berakhir pada 23:59:59.9999999, jadi kolom yang berisi 24:00:00 mempertahankan teksnya.time_as_interval
infinity, -infinity and BC datesNULLSQL Server menyimpan tahun 1 sampai 9999 tanpa infinity. Nilai itu menjadi NULL dan laporan menghitungnya.date_out_of_range
NaN and Infinity in numeric, real and double precisionNULLAngka di SQL Server tidak punya NaN atau Infinity, jadi nilai itu menjadi NULL dan laporan menghitungnya.invalid_value_null
NOT NULL columns with values that become NULLNOT NULL dihapusKolom yang nilainya harus menjadi NULL tidak bisa mempertahankan NOT NULL, atau pemuatan akan berhenti.not_null_relaxed
enum typesnvarchar dengan CHECK labelnyaTeks dengan CHECK mempertahankan nilai yang sama.
enum columns holding values outside their labelsnvarchar tanpa CHECKNilai yang tidak ada di label akan gagal di CHECK, jadi CHECK tidak dibuat.enum_check_skipped
uuid, inet, cidr, macaddruniqueidentifier; alamat sebagai nvarcharuniqueidentifier adalah UUID di SQL Server; alamat disimpan sebagai teks.
byteavarbinary(max)Byte tetap byte.
bit(n), bit varyingbit untuk satu bit; bigint hingga 63 bit; digit teks jika lebihSatu bit berarti ya atau tidak; string bit yang lebih panjang disimpan sebagai angka yang dibentuk bit-bitnya.
oid, xid, cidbigint dengan CHECK bahwa nilainya tidak negatifbigint memuat setiap nilai.
serial, identityIDENTITY, berlanjut setelah id tertinggiId yang disalin dimuat dengan IDENTITY_INSERT, dan penghitung berlanjut setelah id tertinggi atau nilai berikutnya dari sequence, mana yang lebih tinggi.
a second serial or identity column in a tablebilangan bulat biasaSQL Server menghitung satu kolom IDENTITY per tabel; kolom lain mempertahankan nilainya tanpa penghitung.counter_dropped
sequences not owned by a columnCREATE SEQUENCE ... AS bigint, dengan nilai berikutnyaSQL Server punya sequence dengan opsi yang sama; masing-masing berlanjut dari posisi terakhir di dump.
generated columnskolom computed, PERSISTED jika sumber menyimpannyaSQL Server menghitungnya dengan dua cara yang sama.
generated columns with functions SQL Server lackskolom biasa berisi nilainyaRumus yang tidak bisa ditulis untuk SQL Server menyisakan kolom biasa berisi nilai dari dump dan satu baris laporan.generated_not_translated
defaults with functions SQL Server lacks, and defaults from a sequencetanpa defaultDefault yang tidak bisa ditulis untuk SQL Server dihilangkan dan dilaporkan.default_not_translated
CHECK constraintsditerjemahkan, langsung di CREATE TABLECHECK di dalam tabel diuji saat setiap baris dimuat.
CHECK constraints with functions SQL Server lackstidak dibuatCHECK yang tidak bisa ditulis untuk SQL Server dihilangkan dan dilaporkan.check_skipped
CHECK ... NOT VALIDtidak dibuatPostgreSQL tidak pernah memeriksa baris yang sudah ada sebelumnya, jadi baris itu bisa melanggarnya.check_not_valid
gin, gist, brin and hash indexes, partial and expression indexes, and indexes on text that doesn't fit a keytidak dibuatSQL Server mengindeks kolom, bukan ekspresi, dan bukan nvarchar(max).index_skipped
foreign keyssetelah data WITH NOCHECK, lalu diperiksa dengan peringatan untuk baris tanpa indukKey dibuat setelah baris dan diperiksa terakhir; baris tanpa induk membuatnya tetap tidak diperiksa dengan peringatan, bukan menghentikan pemuatan.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server menolak cascade yang bisa mencapai satu tabel dua kali; PostgreSQL mengizinkannya.foreign_key_action_dropped
foreign keys to tables the dump doesn't createtidak dibuatKey tidak bisa merujuk ke tabel yang tidak ada.foreign_key_skipped
partitioned tablessatu tabel dengan baris dari setiap partisiBarisnya sama; partisi ulang tabel di SQL Server jika diperlukan.partitions_dropped
views, functions, procedures, triggers, rules, policies, extensions and typesdicantumkan di laporanKodenya ditulis dalam bahasa PostgreSQL, jadi dicantumkan agar Anda buat ulang.not_converted_objects
dumps without CREATE TABLE (--data-only)tipe dibaca dari nilainyaDump yang hanya berisi data hanya punya baris, jadi tipenya berasal dari nilainya.no_schema
expressions in INSERT valuesNULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya.expression_value
types IntoSQL doesn't knownvarchar(max)Teks memuat nilai apa pun; ubah tipenya setelah pemuatan.unknown_type
text that isn't valid in its encodingbyte yang rusak menjadi karakter penggantinvarchar memuat teks Unicode.invalid_utf8_replaced
text decoded twice (ñ)disalin apa adanyaDump berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.mojibake_suspected

Muat skrip ke SQL Server

Skrip membuat tabel, menyalin baris, lalu menambahkan kunci, indeks, dan foreign key, jadi pemuatan berjalan cepat dan berhenti di galat pertama.

sqlcmd -b -f 65001 -S localhost -d mydb -i postgresql.sql_server.sql

Foreign key ditambahkan WITH NOCHECK lalu diperiksa. Jika sebuah baris merujuk ke baris yang tidak ada, skrip menyebutkan constraint mana dan membiarkannya tidak diperiksa, bukan gagal di tengah jalan.

Untuk dump yang besar, jalankan sqlcmd di mesin yang sama dengan server. Setiap batch berisi maksimal 1000 baris di-commit sendiri, jadi log transaksi tetap kecil.

Buat dump PostgreSQL untuk hasil terbaik

Konverter membaca apa yang ada di dump. Opsi berikut membuat lebih banyak data Anda tetap ada di dalamnya:

  • --format=plain, default pg_dump, menulis SQL. Arsip custom atau directory (-Fc, -Fd) menjadi SQL dengan pg_restore -f dump.sql, tanpa server database.
  • --no-owner --no-privileges menghilangkan role dan grant, yang memang dilewati konverter, jadi dump lebih kecil.
  • pg_dumpall menyimpan setiap database dalam satu file; tabel masing-masing diberi nama sesuai database-nya, jadi tidak ada yang bentrok.

Yang tidak dikonversi

View, materialized view, fungsi, prosedur, trigger, rule, kebijakan keamanan baris, ekstensi, dan tipe ditulis dalam bahasa PostgreSQL sendiri. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk SQL Server.

Pertanyaan tentang PostgreSQL ke SQL Server

Tidak terjawab di sini? Tulis ke kami dari halaman kontak, dan seseorang akan membalas. Halaman kontak

Apakah dump saya diunggah?

Tidak. Konverter berjalan di browser Anda dan membaca dump dari disk Anda sepotong demi sepotong, jadi dump tidak pernah meninggalkan komputer Anda. Aplikasi desktop dan command line juga mengonversi di komputer Anda.

Seberapa besar dump yang bisa dipakai?

Konverter tidak pernah menyimpan seluruh dump di memori: file dibaca dua kali, per rentang, dan skrip ditulis sambil berjalan. Dump berukuran beberapa gigabyte bisa dikonversi di browser, di aplikasi desktop, dan dengan command line.

Apakah arsip pg_dump -Fc bisa dibaca?

Tidak langsung: arsip custom adalah format biner. pg_restore -f dump.sql dump.backup mengubahnya menjadi SQL plain yang dibaca konverter, tanpa terhubung ke server. Konverter memberi tahu saat menerima arsip.

Dump dari versi PostgreSQL mana yang bisa dipakai?

Dump yang ditulis pg_dump dan pg_dumpall dari PostgreSQL 10 ke atas, dengan baris COPY atau INSERT. Setiap dump uji berasal dari PostgreSQL 13 dan 18 dan dibandingkan dengan sumbernya sel demi sel.

Apakah nilai serial dan identity dipertahankan?

Ya. Kolom serial atau identity setiap tabel menjadi kolom IDENTITY, setiap baris mempertahankan id-nya, dan id berikutnya berlanjut setelah id tertinggi. SQL Server menghitung satu kolom per tabel, jadi kolom lain mempertahankan nilainya tanpa penghitung.

Apa yang terjadi pada array, enum, dan tipe PostgreSQL lainnya?

Array menjadi array JSON, boolean menjadi bit, uuid menjadi uniqueidentifier, dan timestamp dengan zona waktu menjadi datetimeoffset. Teks dibandingkan secara persis, seperti di PostgreSQL, dan citext mengabaikan huruf besar dan kecil. Range, tipe geometris, dan tipe komposit mempertahankan teks PostgreSQL.

Bagaimana dengan fungsi, trigger, dan view?

Semuanya dicantumkan di laporan berdasarkan nama dan tidak dikonversi, karena setiap database menulisnya dalam bahasanya sendiri.

Di versi SQL Server mana skrip bisa dimuat?

SQL Server 2017 sampai 2025. Skrip yang sama dimuat di setiap versi itu, dan berhenti di galat pertama jika ada yang salah.