Langsung ke konten
Beranda IntoSQL

Konversi SQL Server ke PostgreSQL

Letakkan skrip yang ditulis Generate Scripts di SSMS dengan schema dan data, sebagai .sql atau .sql.gz, UTF-16 atau UTF-8, lalu unduh skrip PostgreSQL dengan tabel, kunci, indeks, dan data yang sama. Setiap nilai yang tidak bisa disimpan PostgreSQL apa adanya, dan setiap objek yang tidak didukungnya, dicantumkan di laporan.

File Anda
sqlshop_2024_sqlserver.sqlFile contoh, 11 kB
Database Anda

18 baris dikonversi, 3 perbaikan, tidak ada yang ditolak

Tampilkan

Tabel di shop_2024_sqlserver.sqlDump SQL Server · ditulis oleh SQL Server Management Objects · utf-8

  • orders10 baris2
    11 kolom
    idinteger not null
    customer_idinteger not null
    statusvarchar(10) not null
    totalnumeric(19,4) not null
    itemssmallint not null
    ordered_attimestamp(0) not null
    shipped_attimestamp(6)
    notetext
    detailstext
    order_refuuid not null
    total_with_taxnumeric(12,2)
  • customers8 baris1
    8 kolom
    idinteger not null
    namevarchar(100) not null
    emailvarchar(200) not null
    countryvarchar(2) not null
    is_activeboolean not null
    signed_update
    created_attimestamptz(0) not null
    row_versionbytea

Tidak dikonversi

  • View paid_orders
  • Trigger orders_no_negative

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

-- Written by IntoSQL from a SQL Server dump. Load it with: psql -v ON_ERROR_STOP=1 -f <file>
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET synchronous_commit = off;
SET maintenance_work_mem = '512MB';

CREATE TABLE orders (
    id integer GENERATED BY DEFAULT AS IDENTITY NOT NULL,
    customer_id integer NOT NULL,
    status varchar(10) DEFAULT 'pending' NOT NULL,
    total numeric(19,4) NOT NULL,
    items smallint DEFAULT 1 NOT NULL,
    ordered_at timestamp(0) NOT NULL,
    shipped_at timestamp(6),
    note text,
    details text,
    order_ref uuid DEFAULT (gen_random_uuid()::text) NOT NULL,
    total_with_tax numeric(12,2) GENERATED ALWAYS AS ((cast(total * (1.16) AS numeric(12,2)))::numeric(12,2)) STORED,
    CONSTRAINT orders_items_check CHECK (items >= 0),
    CONSTRAINT orders_check2 CHECK (status = 'cancelled' OR status = 'shipped' OR status = 'paid' OR status = 'pending'),
    CONSTRAINT orders_check3 CHECK (total >= (0))
);

CREATE TABLE customers (
    id integer GENERATED BY DEFAULT AS IDENTITY NOT NULL,
    name varchar(100) NOT NULL,
    email varchar(200) NOT NULL,
    country varchar(2) DEFAULT 'US' NOT NULL,
    is_active boolean DEFAULT true NOT NULL,
    signed_up date,
    created_at timestamptz(0) DEFAULT CURRENT_TIMESTAMP NOT NULL,
    row_version bytea
);

COPY customers (id, name, email, country, is_active, signed_up, created_at) FROM stdin;
1	Ana Martínez	ana@example.com	MX	t	2023-01-15	2023-01-15 10:24:00.000000+00:00
2	Zoë Müller	zoe@example.de	DE	t	2023-02-03	2023-02-03 08:11:42.000000+00:00
3	José Peña	jose@example.es	ES	f	2023-03-21	2023-03-21 19:05:17.000000+00:00
4	李雷	lilei@example.cn	CN	t	2023-05-09	2023-05-09 02:40:00.000000+00:00
5	Noah O'Brien	noah@example.ie	IE	t	\N	2023-06-30 14:00:00.000000+00:00
6	Amélie Laurent	amelie@example.fr	FR	t	2024-01-02	2024-01-02 09:30:00.000000+00:00
7	Ravi Patel	ravi@example.in	IN	f	2024-02-29	2024-02-29 23:59:59.000000+00:00
8	Sofia Rossi 🌻	sofia@example.it	IT	t	2024-04-12	2024-04-12 12:12:12.000000+00:00
\.

COPY orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, order_ref) FROM stdin;
1	1	shipped	129.9000	3	2024-03-01T10:00:00.000000	2024-03-02T16:30:00.123456	\N	{"gift": false}	0b7a4c2e-3f1d-4e8a-9c55-1a2b3c4d5e6f
2	2	paid	54.0000	1	2024-03-02T11:15:00.000000	\N	Gift wrap 🎁	{"gift": true, "wrap": "red"}	1c8b5d3f-4a2e-4f9b-8d66-2b3c4d5e6f70
3	1	cancelled	12.5000	1	2024-03-03T09:45:00.000000	\N	Customer changed their mind	\N	2d9c6e4a-5b3f-4a0c-9e77-3c4d5e6f7081
4	4	shipped	980.0000	12	2024-03-05T02:10:00.000000	2024-03-07T08:00:00.000000	请小心轻放	{"fragile": true}	3e0d7f5b-6c4a-4b1d-8f88-4d5e6f708192
5	5	pending	45.7500	2	2024-03-08T17:20:00.000000	\N	Leave at the door; ring twice	\N	4f1e806c-7d5b-4c2e-9a99-5e6f708192a3
6	6	shipped	310.4000	5	2024-03-10T13:00:00.000000	2024-03-11T09:00:00.000000	Fragile: "glass"	{"fragile": true}	50f2917d-8e6c-4d3f-8baa-6f708192a3b4
7	8	paid	76.2000	2	2024-03-11T18:45:00.000000	\N	\N	\N	6103a28e-9f7d-4e40-9cbb-708192a3b4c5
8	2	shipped	19.9900	1	2024-03-12T08:00:00.000000	9999-12-31T23:59:59.999999	Shipped date set to the maximum by an old import	\N	7214b39f-a08e-4f51-8dcc-8192a3b4c5d6
9	3	shipped	64.0000	2	2024-03-14T15:30:00.000000	2024-03-15T10:00:00.000000	Two parcels	{"parcels": [1, 2]}	8325c4a0-b19f-4062-9edd-92a3b4c5d6e7
10	7	paid	1499.0000	1	2024-03-15T21:05:00.000000	\N	C:\\Users\\ravi\\invoice.pdf	\N	9436d5b1-c2a0-4173-8fee-a3b4c5d6e7f8
\.


-- Keys, indexes and constraints, after the rows so each builds once.
CREATE UNIQUE INDEX orders_pkey ON orders (id);
CREATE INDEX orders_idx_orders_customer ON orders (customer_id);
CREATE INDEX orders_idx_orders_status_date ON orders (status, ordered_at);
CREATE UNIQUE INDEX customers_pkey ON customers (id);
CREATE UNIQUE INDEX customers_email ON customers (email);
ALTER TABLE orders ADD CONSTRAINT orders_pkey PRIMARY KEY USING INDEX orders_pkey;
ALTER TABLE customers ADD CONSTRAINT customers_pkey PRIMARY KEY USING INDEX customers_pkey;
ALTER TABLE customers ADD CONSTRAINT customers_email UNIQUE USING INDEX customers_email;
ALTER TABLE orders ADD CONSTRAINT orders_fkey FOREIGN KEY (customer_id) REFERENCES customers (id) NOT VALID;
DO $f$ BEGIN
    ALTER TABLE orders VALIDATE CONSTRAINT orders_fkey;
EXCEPTION WHEN foreign_key_violation THEN
    RAISE WARNING 'foreign key % has rows without a parent: it stays NOT VALID, and new rows are checked', 'orders_fkey';
END $f$;
SELECT setval(pg_get_serial_sequence('orders', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM orders)::numeric, 0) + 1, 1), 2147483647)::bigint, false);
SELECT setval(pg_get_serial_sequence('customers', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM customers)::numeric, 0) + 1, 1), 2147483647)::bigint, false);
COMMENT ON TABLE customers IS 'People who bought at least once';

Perbaikan

  1. "items" dari orders bersifat unsigned, jadi menjadi smallint dengan CHECK bahwa nilainya tidak negatif.
  2. "shipped_at" dari orders adalah datetime2(7), dengan digit detik lebih banyak daripada yang disimpan PostgreSQL, jadi menjadi timestamp(6) dan digit terakhirnya dipotong.
  3. "row_version" dari customers adalah versi baris yang diatur SQL Server sendiri; dump tidak berisi nilainya, jadi menjadi bytea dan kosong.

Perlu diperiksa

  • 6 kolom teks di sumber membandingkan tanpa membedakan huruf besar dan kecil; PostgreSQL membandingkan secara persis, jadi kunci unik dan pencarian bisa berperilaku berbeda. Gunakan collation atau tipe kolom yang tidak membedakan huruf besar dan kecil pada kolom yang membutuhkannya.
  • 2 view, trigger, rutin, atau event tidak dikonversi; laporan mencantumkan masing-masing. Buat ulang secara manual di PostgreSQL.
  • CHECK check1 pada orders tidak bisa ditulis untuk PostgreSQL (function isjson), jadi tidak dibuat. Tulis CHECK secara manual jika penting.
  • Indeks idx_orders_pending pada orders memakai ekspresi yang tidak bisa ditulis untuk PostgreSQL (filtered index), jadi tidak dibuat. Buat indeks secara manual jika kueri memerlukannya.

File Anda dikonversi di komputer ini dan tidak pernah diunggah.

Contoh lain:

Yang berubah dari SQL Server ke PostgreSQL

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

  • bit

    boolean

    bit memuat 1 dan 0, yang merupakan true dan false di PostgreSQL.

  • tinyint

    smallint dengan CHECK bahwa nilainya tidak negatif

    tinyint di SQL Server berkisar dari 0 sampai 255; bilangan bulat terkecil di PostgreSQL bertanda, jadi CHECK menjaga rentangnya.

    Baris laporan: unsigned_widened

  • char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), text

    varchar(n) dan text

    Teks PostgreSQL memuat setiap karakter, jadi varchar dan nvarchar menjadi tipe yang sama.

  • decimal(p,s), money, smallmoney

    numeric(p,s); money sebagai numeric(19,4)

    Setiap digit dipertahankan, money dengan empat desimalnya.

  • datetime, datetime2, smalldatetime

    timestamp(p)

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

  • datetime2(7), time(7) and datetimeoffset(7)

    enam digit detik, digit ketujuh dipotong

    PostgreSQL menyimpan mikrodetik; digit ketujuh (100 nanodetik) dipotong, tidak pernah dibulatkan, jadi tidak ada nilai yang bergeser ke detik atau hari berikutnya.

    Baris laporan: fraction_cut

  • datetimeoffset

    timestamptz, momen yang sama

    timestamptz menyimpan momennya; PostgreSQL menampilkannya dalam zona waktu sesi, bukan offset yang dimiliki setiap nilai.

  • time

    time(p)

    Jam dalam sehari yang sama.

  • json (SQL Server 2025)

    jsonb

    Nilai JSON yang sama.

  • uniqueidentifier

    uuid

    Identifier yang sama, ditulis dengan huruf kecil.

  • binary, varbinary, image

    bytea

    Byte tetap byte.

  • geometry, geography

    bytea dengan byte milik SQL Server

    SSMS menulis nilai spasial dalam serialisasi milik SQL Server, yang dipertahankan byte demi byte.

    Baris laporan: spatial_as_native

  • rowversion, timestamp

    bytea, kosong

    SQL Server mengatur versi baris sendiri dan SSMS tidak menulis nilainya.

    Baris laporan: rowversion_empty

  • sql_variant, hierarchyid, vector

    text

    PostgreSQL tidak punya tipe yang setara; sql_variant mempertahankan teks setiap nilai dan hierarchyid jalurnya, misalnya /1/2/. xml tetap xml.

    Baris laporan: type_replaced

  • collations that ignore case (_CI_)

    perbandingan persis

    PostgreSQL membandingkan teks secara persis, jadi kolom yang mengabaikan huruf besar dan kecil di SQL Server kini membedakan Ana dan ana.

    Baris laporan: case_insensitive_collation

  • IDENTITY

    GENERATED BY DEFAULT AS IDENTITY, berlanjut setelah id tertinggi

    Id yang disalin dimuat apa adanya, dan penghitung berlanjut setelah id tertinggi.

  • CREATE SEQUENCE

    CREATE SEQUENCE dengan opsi yang sama

    Sequence PostgreSQL bekerja dengan cara yang sama. SSMS tidak menulis posisi yang sudah dicapai sequence, jadi sequence mulai dari titik saat dibuat.

  • computed columns

    kolom generated, STORED

    PostgreSQL 13 sampai 17 hanya menyimpan kolom generated; rumusnya sama, dengan CONCAT ditulis agar NULL dihitung sebagai kosong seperti di SQL Server.

    Baris laporan: virtual_as_stored

  • computed columns with functions PostgreSQL lacks

    kolom biasa

    Rumus yang tidak bisa ditulis untuk PostgreSQL menyisakan kolom biasa dan satu baris laporan; SSMS tidak menulis nilai untuk kolom terhitung.

    Baris laporan: generated_not_translated

  • defaults with functions PostgreSQL lacks, and NEXT VALUE FOR

    tanpa default

    Default yang tidak bisa ditulis untuk PostgreSQL dihilangkan dan dilaporkan.

    Baris laporan: default_not_translated

  • CHECK constraints

    diterjemahkan

    CHECK yang sama, diuji saat setiap baris dimuat.

  • CHECK constraints with functions PostgreSQL lacks

    tidak dibuat

    CHECK yang tidak bisa ditulis untuk PostgreSQL dihilangkan dan dilaporkan.

    Baris laporan: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    tidak dibuat

    SQL Server tidak menerapkan CHECK ini, jadi baris bisa melanggarnya.

    Baris laporan: check_not_enforced

  • filtered and columnstore indexes

    tidak dibuat

    IntoSQL menulis indeks b-tree pada kolom; buat ulang indeks lainnya setelah pemuatan.

    Baris laporan: index_skipped

  • foreign keys

    foreign key, setelah baris

    Baris dimuat dalam urutan apa pun, dan key memeriksanya sesudahnya.

  • 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

  • tables on a partition scheme

    satu tabel dengan baris dari setiap partisi

    Barisnya sama; partisi ulang tabel di PostgreSQL jika diperlukan.

    Baris laporan: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    dua tabel: baris saat ini dan riwayatnya

    Tabel dan tabel riwayatnya disalin sebagai tabel biasa; PostgreSQL tidak menyimpan riwayat sendiri.

    Baris laporan: system_versioning_dropped

  • 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

  • views, functions, procedures, triggers, synonyms, types and partition functions

    dicantumkan di laporan

    Kodenya ditulis dalam T-SQL, jadi dicantumkan agar Anda bisa membuatnya ulang.

    Baris laporan: not_converted_objects

  • scripts without CREATE TABLE (data only)

    tipe dibaca dari nilai

    Skrip yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai.

    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

    text

    Text memuat nilai apa pun; ubah tipenya setelah pemuatan.

    Baris laporan: unknown_type

  • dates that aren't valid

    NULL

    Nilai yang bukan tanggal menjadi NULL dan laporan menghitungnya.

    Baris laporan: date_out_of_range

  • NUL characters in text

    dihapus

    Teks PostgreSQL tidak bisa memuat karakter NUL. Karakter itu dihapus dan laporan menghitung nilainya.

    Baris laporan: nul_removed

  • text that isn't valid in its encoding

    byte yang rusak menjadi karakter pengganti

    Teks PostgreSQL harus berupa UTF-8 yang valid.

    Baris laporan: invalid_utf8_replaced

  • text decoded twice (ñ)

    disalin apa adanya

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

    Baris laporan: mojibake_suspected

Di SQL ServerDi PostgreSQLBaris laporan
bitbooleanbit memuat 1 dan 0, yang merupakan true dan false di PostgreSQL.
tinyintsmallint dengan CHECK bahwa nilainya tidak negatiftinyint di SQL Server berkisar dari 0 sampai 255; bilangan bulat terkecil di PostgreSQL bertanda, jadi CHECK menjaga rentangnya.unsigned_widened
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textvarchar(n) dan textTeks PostgreSQL memuat setiap karakter, jadi varchar dan nvarchar menjadi tipe yang sama.
decimal(p,s), money, smallmoneynumeric(p,s); money sebagai numeric(19,4)Setiap digit dipertahankan, money dengan empat desimalnya.
datetime, datetime2, smalldatetimetimestamp(p)datetime adalah pembacaan jam dinding, seperti timestamp tanpa zona waktu.
datetime2(7), time(7) and datetimeoffset(7)enam digit detik, digit ketujuh dipotongPostgreSQL menyimpan mikrodetik; digit ketujuh (100 nanodetik) dipotong, tidak pernah dibulatkan, jadi tidak ada nilai yang bergeser ke detik atau hari berikutnya.fraction_cut
datetimeoffsettimestamptz, momen yang samatimestamptz menyimpan momennya; PostgreSQL menampilkannya dalam zona waktu sesi, bukan offset yang dimiliki setiap nilai.
timetime(p)Jam dalam sehari yang sama.
json (SQL Server 2025)jsonbNilai JSON yang sama.
uniqueidentifieruuidIdentifier yang sama, ditulis dengan huruf kecil.
binary, varbinary, imagebyteaByte tetap byte.
geometry, geographybytea dengan byte milik SQL ServerSSMS menulis nilai spasial dalam serialisasi milik SQL Server, yang dipertahankan byte demi byte.spatial_as_native
rowversion, timestampbytea, kosongSQL Server mengatur versi baris sendiri dan SSMS tidak menulis nilainya.rowversion_empty
sql_variant, hierarchyid, vectortextPostgreSQL tidak punya tipe yang setara; sql_variant mempertahankan teks setiap nilai dan hierarchyid jalurnya, misalnya /1/2/. xml tetap xml.type_replaced
collations that ignore case (_CI_)perbandingan persisPostgreSQL membandingkan teks secara persis, jadi kolom yang mengabaikan huruf besar dan kecil di SQL Server kini membedakan Ana dan ana.case_insensitive_collation
IDENTITYGENERATED BY DEFAULT AS IDENTITY, berlanjut setelah id tertinggiId yang disalin dimuat apa adanya, dan penghitung berlanjut setelah id tertinggi.
CREATE SEQUENCECREATE SEQUENCE dengan opsi yang samaSequence PostgreSQL bekerja dengan cara yang sama. SSMS tidak menulis posisi yang sudah dicapai sequence, jadi sequence mulai dari titik saat dibuat.
computed columnskolom generated, STOREDPostgreSQL 13 sampai 17 hanya menyimpan kolom generated; rumusnya sama, dengan CONCAT ditulis agar NULL dihitung sebagai kosong seperti di SQL Server.virtual_as_stored
computed columns with functions PostgreSQL lackskolom biasaRumus yang tidak bisa ditulis untuk PostgreSQL menyisakan kolom biasa dan satu baris laporan; SSMS tidak menulis nilai untuk kolom terhitung.generated_not_translated
defaults with functions PostgreSQL lacks, and NEXT VALUE FORtanpa defaultDefault yang tidak bisa ditulis untuk PostgreSQL dihilangkan dan dilaporkan.default_not_translated
CHECK constraintsditerjemahkanCHECK yang sama, diuji saat setiap baris dimuat.
CHECK constraints with functions PostgreSQL lackstidak dibuatCHECK yang tidak bisa ditulis untuk PostgreSQL dihilangkan dan dilaporkan.check_skipped
CHECK constraints added WITH NOCHECK or disabledtidak dibuatSQL Server tidak menerapkan CHECK ini, jadi baris bisa melanggarnya.check_not_enforced
filtered and columnstore indexestidak dibuatIntoSQL menulis indeks b-tree pada kolom; buat ulang indeks lainnya setelah pemuatan.index_skipped
foreign keysforeign key, setelah barisBaris dimuat dalam urutan apa pun, dan key memeriksanya sesudahnya.
foreign keys to tables the dump doesn't createtidak dibuatKey tidak bisa merujuk ke tabel yang tidak ada.foreign_key_skipped
tables on a partition schemesatu tabel dengan baris dari setiap partisiBarisnya sama; partisi ulang tabel di PostgreSQL jika diperlukan.partitions_dropped
temporal tables (SYSTEM_VERSIONING)dua tabel: baris saat ini dan riwayatnyaTabel dan tabel riwayatnya disalin sebagai tabel biasa; PostgreSQL tidak menyimpan riwayat sendiri.system_versioning_dropped
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
views, functions, procedures, triggers, synonyms, types and partition functionsdicantumkan di laporanKodenya ditulis dalam T-SQL, jadi dicantumkan agar Anda bisa membuatnya ulang.not_converted_objects
scripts without CREATE TABLE (data only)tipe dibaca dari nilaiSkrip yang hanya berisi data hanya punya baris, jadi tipenya diambil dari nilai.no_schema
expressions in INSERT valuesNULLKonverter yang tidak menjalankan database tidak bisa mengevaluasinya.expression_value
types IntoSQL doesn't knowtextText memuat nilai apa pun; ubah tipenya setelah pemuatan.unknown_type
dates that aren't validNULLNilai yang bukan tanggal menjadi NULL dan laporan menghitungnya.date_out_of_range
NUL characters in textdihapusTeks PostgreSQL tidak bisa memuat karakter NUL. Karakter itu dihapus dan laporan menghitung nilainya.nul_removed
text that isn't valid in its encodingbyte yang rusak menjadi karakter penggantiTeks PostgreSQL harus berupa UTF-8 yang valid.invalid_utf8_replaced
text decoded twice (ñ)disalin apa adanyaSkrip berisi persis karakter ini, jadi karakter itu disalin; laporan menunjukkannya.mojibake_suspected

Muat skrip ke PostgreSQL

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

psql -v ON_ERROR_STOP=1 -d mydb -f sql_server.postgresql.sql

Foreign key ditambahkan sebagai NOT VALID lalu divalidasi. Jika sebuah baris merujuk ke baris yang tidak ada, skrip memberi tahu constraint mana, bukan gagal di tengah jalan.

Untuk dump yang besar, buat database terlebih dahulu dan jalankan skrip dengan psql dari mesin yang sama dengan server.

IntoSQL Pro memuat file langsung ke PostgreSQL dari aplikasi desktop atau command line, tanpa menulis skrip.

Buat dump SQL Server untuk hasil terbaik

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

  • Di SSMS, klik kanan database, Tasks, Generate Scripts, lalu pilih tabelnya. dbatools, mssql-scripter, dan alat lain yang dibangun di atas library yang sama menulis skrip yang sama.
  • Di Advanced, atur Types of data to script ke Schema and data. Skrip yang hanya berisi schema punya tabel tanpa baris.
  • Simpan sebagai Unicode, default SSMS, atau sebagai UTF-8: keduanya dibaca dengan cara yang sama, dan gzip juga bisa.

Yang tidak dikonversi

View, fungsi, prosedur, trigger, sinonim, rule, dan kebijakan keamanan ditulis dalam T-SQL. Semuanya dicantumkan di laporan berdasarkan nama, tidak pernah dibuang diam-diam, sehingga Anda bisa menulis ulang untuk PostgreSQL.

Pertanyaan tentang SQL Server ke PostgreSQL

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 file UTF-16 yang disimpan SSMS bisa dibaca?

Ya. SSMS menyimpan skrip sebagai UTF-16 secara default, dan konverter membaca UTF-16 dan UTF-8 sama baiknya, di-gzip atau tidak, dengan GO di antara batch.

Skrip dari versi SQL Server mana yang bisa dipakai?

Skrip yang ditulis SSMS, dbatools, atau mssql-scripter dari SQL Server 2017 ke atas. Setiap skrip uji berasal dari SQL Server 2017, 2022, dan 2025 dan dibandingkan dengan sumbernya sel demi sel.

Apakah nilai IDENTITY dipertahankan?

Ya. Kolom IDENTITY menjadi kolom identity, setiap baris mempertahankan id-nya, dan id berikutnya berlanjut setelah id tertinggi. Sequence dibuat dengan opsi yang sama.

Apa yang terjadi pada money, datetimeoffset, dan tipe SQL Server lainnya?

bit menjadi boolean, money menjadi numeric(19,4), uniqueidentifier menjadi uuid, xml tetap xml, dan datetimeoffset menjadi timestamptz. datetime2 mempertahankan enam digit detik, digit ketujuh dipotong. Kolom yang mengabaikan huruf besar dan kecil dibandingkan secara persis, dan laporan menyebutkan kolomnya.

Bagaimana dengan prosedur, trigger, dan view?

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

Di versi PostgreSQL mana skrip bisa dimuat?

PostgreSQL 13 sampai 18. Skrip yang sama dimuat di setiap versi itu, dan berhenti di galat pertama jika ada yang salah.