İçeriğe geç
IntoSQL ana sayfası

SQL Server - PostgreSQL dönüştürme

SSMS'in Generate Scripts aracının şema ve veriyle yazdığı betiği .sql veya .sql.gz, UTF-16 veya UTF-8 olarak bırakın ve aynı tablolar, anahtarlar, indeksler ve verilerle bir PostgreSQL betiği indirin. PostgreSQL'in olduğu gibi tutamadığı her değer ve taşımadığı her nesne raporda listelenir.

Dosyanız
sqlshop_2024_sqlserver.sqlÖrnek dosya, 11 kB
Veritabanınız

18 satır dönüştürüldü, 3 düzeltme, reddedilen yok

Göster

shop_2024_sqlserver.sql içindeki tablolarSQL Server dökümü · SQL Server Management Objects ile yazıldı · utf-8

  • orders10 satır2
    11 sütun
    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 satır1
    8 sütun
    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

Dönüştürülmedi

  • Görünüm paid_orders
  • Tetikleyici orders_no_negative

Her veritabanı bunları kendi dilinde yazar. Bunları PostgreSQL için yeniden yazın.

-- 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';

Düzeltmeler

  1. orders tablosunun "items" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile smallint oldu.
  2. orders tablosunun "shipped_at" sütunu datetime2(7); PostgreSQL türünün tuttuğundan fazla saniye kesri basamağı var, bu yüzden timestamp(6) olur ve son basamaklar kesilir.
  3. customers tablosunun "row_version" sütunu, SQL Server'ın kendisinin ayarladığı bir satır sürümüdür; dökümde bunun için değer yoktur, bu yüzden bytea olur ve boş kalır.

Kontrol edilmeli

  • Kaynakta 6 metin sütunu büyük/küçük harf ayırmadan karşılaştırıyor; PostgreSQL tam karşılaştırır, bu yüzden benzersiz anahtarlar ve aramalar farklı davranabilir. Gereken sütunlarda büyük/küçük harf duyarsız bir harmanlama veya sütun türü kullanın.
  • 2 görünüm, tetikleyici, rutin veya olay dönüştürülmedi; rapor her birini listeliyor. Bunları PostgreSQL'de elle yeniden oluşturun.
  • orders üzerindeki check1 CHECK kısıtı PostgreSQL için yazılamıyor (function isjson); bu yüzden oluşturulmadı. Önemliyse CHECK kısıtını elle yazın.
  • orders üzerindeki idx_orders_pending indeksi PostgreSQL için yazılamayan bir ifade kullanıyor (filtered index); bu yüzden oluşturulmadı. Sorgular gerektiriyorsa indeksi elle oluşturun.

Dosyan bu bilgisayarda dönüştürülür ve asla yüklenmez.

Diğer örnekler:

SQL Server ile PostgreSQL arasında neler değişir

Her satır, dönüştürücünün uyguladığı bir kuraldır; yanında, kural verilerinizde bir şeyi değiştirdiğinde yazılan rapor satırı yer alır.

  • bit

    boolean

    bit 1 ve 0 tutar; bunlar PostgreSQL'in true ve false değerleridir.

  • tinyint

    negatif olmadığını denetleyen bir CHECK ile smallint

    SQL Server'ın tinyint türü 0 ile 255 arasındadır; PostgreSQL'in en küçük tamsayısı işaretlidir, bu yüzden bir CHECK aralığı korur.

    Rapor satırı: unsigned_widened

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

    varchar(n) ve text

    PostgreSQL'in text türü her karakteri tutar, bu yüzden varchar ve nvarchar aynı tür olur.

  • decimal(p,s), money, smallmoney

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

    Her basamak korunur, money dört ondalığıyla.

  • datetime, datetime2, smalldatetime

    timestamp(p)

    datetime, saat dilimi olmayan bir timestamp gibi bir duvar saati okumasıdır.

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

    saniyenin altı basamağı, yedincisi kesilir

    PostgreSQL mikrosaniyeleri tutar; yedinci basamak (100 nanosaniye) yuvarlanmaz, kesilir, böylece hiçbir değer sonraki saniyeye veya güne kaymaz.

    Rapor satırı: fraction_cut

  • datetimeoffset

    timestamptz, aynı anlar

    timestamptz anı korur; PostgreSQL onu her değerin sahip olduğu fark yerine oturumun saat diliminde gösterir.

  • time

    time(p)

    Günün aynı saatleri.

  • json (SQL Server 2025)

    jsonb

    Aynı JSON değerleri.

  • uniqueidentifier

    uuid

    Aynı tanımlayıcılar, küçük harfle yazılır.

  • binary, varbinary, image

    bytea

    Baytlar bayt olarak kalır.

  • geometry, geography

    SQL Server'ın kendi baytlarıyla bytea

    SSMS uzamsal değerleri SQL Server'ın serileştirmesiyle yazar ve bu bayt bayt korunur.

    Rapor satırı: spatial_as_native

  • rowversion, timestamp

    bytea, boş

    SQL Server satır sürümünü kendisi ayarlar ve SSMS bunun için değer yazmaz.

    Rapor satırı: rowversion_empty

  • sql_variant, hierarchyid, vector

    text

    PostgreSQL'de karşılık gelen bir tür yoktur; sql_variant her değerin metnini, hierarchyid ise /1/2/ gibi yolunu korur. xml, xml olarak kalır.

    Rapor satırı: type_replaced

  • collations that ignore case (_CI_)

    tam karşılaştırma

    PostgreSQL metni tam karşılaştırır, bu yüzden SQL Server'da büyük/küçük harfi yok sayan sütunlar artık Ana ile ana'yı ayırt eder.

    Rapor satırı: case_insensitive_collation

  • IDENTITY

    en yüksek id'den sonra devam eden GENERATED BY DEFAULT AS IDENTITY

    Kopyalanan id'ler olduğu gibi yüklenir ve sayaç en yüksek id'den sonra devam eder.

  • CREATE SEQUENCE

    aynı seçeneklerle CREATE SEQUENCE

    PostgreSQL sequence nesneleri aynı şekilde çalışır. SSMS bir sequence'ın nereye ulaştığını yazmaz, bu yüzden oluşturulduğu değerden başlar.

  • computed columns

    üretilen sütunlar, STORED

    PostgreSQL 13 ile 17 üretilen sütunları yalnızca saklar; formül aynıdır ve CONCAT, NULL'u SQL Server'daki gibi boş sayacak şekilde yazılır.

    Rapor satırı: virtual_as_stored

  • computed columns with functions PostgreSQL lacks

    düz bir sütun

    PostgreSQL için yazılamayan bir formül düz bir sütun ve bir rapor satırı bırakır; SSMS hesaplanan sütunlar için değer yazmaz.

    Rapor satırı: generated_not_translated

  • defaults with functions PostgreSQL lacks, and NEXT VALUE FOR

    varsayılan değer yok

    PostgreSQL için yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.

    Rapor satırı: default_not_translated

  • CHECK constraints

    çevrilir

    Aynı CHECK kısıtları, her satır yüklenirken denetlenir.

  • CHECK constraints with functions PostgreSQL lacks

    oluşturulmaz

    PostgreSQL için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.

    Rapor satırı: check_skipped

  • CHECK constraints added WITH NOCHECK or disabled

    oluşturulmaz

    SQL Server bu CHECK kısıtlarını uygulamaz, bu yüzden satırlar onları ihlal edebilir.

    Rapor satırı: check_not_enforced

  • filtered and columnstore indexes

    oluşturulmaz

    IntoSQL sütunlar üzerinde b-tree indeksleri yazar; diğerlerini yüklemeden sonra yeniden oluşturun.

    Rapor satırı: index_skipped

  • foreign keys

    satırlardan sonra yabancı anahtarlar

    Satırlar herhangi bir sırada yüklenir ve anahtarlar onları sonradan denetler.

  • foreign keys to tables the dump doesn't create

    oluşturulmaz

    Bir anahtar, var olmayan bir tabloya başvuramaz.

    Rapor satırı: foreign_key_skipped

  • tables on a partition scheme

    her bölümün satırlarını içeren tek tablo

    Satırlar aynıdır; gerekiyorsa tabloyu PostgreSQL'de yeniden bölümleyin.

    Rapor satırı: partitions_dropped

  • temporal tables (SYSTEM_VERSIONING)

    iki tablo: mevcut satırlar ve geçmiş

    Tablo ve geçmiş tablosu düz tablolar olarak kopyalanır; PostgreSQL geçmişi kendisi tutmaz.

    Rapor satırı: system_versioning_dropped

  • NOT NULL columns with values that become NULL

    NOT NULL kaldırılır

    Değerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.

    Rapor satırı: not_null_relaxed

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

    raporda listelenir

    Kodları T-SQL ile yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.

    Rapor satırı: not_converted_objects

  • scripts without CREATE TABLE (data only)

    değerlerden okunan türler

    Yalnızca veri içeren bir betikte yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.

    Rapor satırı: no_schema

  • expressions in INSERT values

    NULL

    Veritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz.

    Rapor satırı: expression_value

  • types IntoSQL doesn't know

    text

    Metin her değeri tutar; yüklemeden sonra türü değiştirin.

    Rapor satırı: unknown_type

  • dates that aren't valid

    NULL

    Tarih olmayan bir değer NULL olur ve rapor onu sayar.

    Rapor satırı: date_out_of_range

  • NUL characters in text

    kaldırılır

    PostgreSQL'in metni NUL karakteri tutamaz. Karakter kaldırılır ve rapor bu değerleri sayar.

    Rapor satırı: nul_removed

  • text that isn't valid in its encoding

    hatalı baytlar yerine koyma karakteri olarak

    PostgreSQL metni geçerli UTF-8 olmalıdır.

    Rapor satırı: invalid_utf8_replaced

  • text decoded twice (ñ)

    olduğu gibi kopyalanır

    Betik tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.

    Rapor satırı: mojibake_suspected

SQL Server içindePostgreSQL içindeRapor satırı
bitbooleanbit 1 ve 0 tutar; bunlar PostgreSQL'in true ve false değerleridir.
tinyintnegatif olmadığını denetleyen bir CHECK ile smallintSQL Server'ın tinyint türü 0 ile 255 arasındadır; PostgreSQL'in en küçük tamsayısı işaretlidir, bu yüzden bir CHECK aralığı korur.unsigned_widened
char(n), varchar(n), nchar(n), nvarchar(n), varchar(max), textvarchar(n) ve textPostgreSQL'in text türü her karakteri tutar, bu yüzden varchar ve nvarchar aynı tür olur.
decimal(p,s), money, smallmoneynumeric(p,s); money numeric(19,4) olarakHer basamak korunur, money dört ondalığıyla.
datetime, datetime2, smalldatetimetimestamp(p)datetime, saat dilimi olmayan bir timestamp gibi bir duvar saati okumasıdır.
datetime2(7), time(7) and datetimeoffset(7)saniyenin altı basamağı, yedincisi kesilirPostgreSQL mikrosaniyeleri tutar; yedinci basamak (100 nanosaniye) yuvarlanmaz, kesilir, böylece hiçbir değer sonraki saniyeye veya güne kaymaz.fraction_cut
datetimeoffsettimestamptz, aynı anlartimestamptz anı korur; PostgreSQL onu her değerin sahip olduğu fark yerine oturumun saat diliminde gösterir.
timetime(p)Günün aynı saatleri.
json (SQL Server 2025)jsonbAynı JSON değerleri.
uniqueidentifieruuidAynı tanımlayıcılar, küçük harfle yazılır.
binary, varbinary, imagebyteaBaytlar bayt olarak kalır.
geometry, geographySQL Server'ın kendi baytlarıyla byteaSSMS uzamsal değerleri SQL Server'ın serileştirmesiyle yazar ve bu bayt bayt korunur.spatial_as_native
rowversion, timestampbytea, boşSQL Server satır sürümünü kendisi ayarlar ve SSMS bunun için değer yazmaz.rowversion_empty
sql_variant, hierarchyid, vectortextPostgreSQL'de karşılık gelen bir tür yoktur; sql_variant her değerin metnini, hierarchyid ise /1/2/ gibi yolunu korur. xml, xml olarak kalır.type_replaced
collations that ignore case (_CI_)tam karşılaştırmaPostgreSQL metni tam karşılaştırır, bu yüzden SQL Server'da büyük/küçük harfi yok sayan sütunlar artık Ana ile ana'yı ayırt eder.case_insensitive_collation
IDENTITYen yüksek id'den sonra devam eden GENERATED BY DEFAULT AS IDENTITYKopyalanan id'ler olduğu gibi yüklenir ve sayaç en yüksek id'den sonra devam eder.
CREATE SEQUENCEaynı seçeneklerle CREATE SEQUENCEPostgreSQL sequence nesneleri aynı şekilde çalışır. SSMS bir sequence'ın nereye ulaştığını yazmaz, bu yüzden oluşturulduğu değerden başlar.
computed columnsüretilen sütunlar, STOREDPostgreSQL 13 ile 17 üretilen sütunları yalnızca saklar; formül aynıdır ve CONCAT, NULL'u SQL Server'daki gibi boş sayacak şekilde yazılır.virtual_as_stored
computed columns with functions PostgreSQL lacksdüz bir sütunPostgreSQL için yazılamayan bir formül düz bir sütun ve bir rapor satırı bırakır; SSMS hesaplanan sütunlar için değer yazmaz.generated_not_translated
defaults with functions PostgreSQL lacks, and NEXT VALUE FORvarsayılan değer yokPostgreSQL için yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.default_not_translated
CHECK constraintsçevrilirAynı CHECK kısıtları, her satır yüklenirken denetlenir.
CHECK constraints with functions PostgreSQL lacksoluşturulmazPostgreSQL için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.check_skipped
CHECK constraints added WITH NOCHECK or disabledoluşturulmazSQL Server bu CHECK kısıtlarını uygulamaz, bu yüzden satırlar onları ihlal edebilir.check_not_enforced
filtered and columnstore indexesoluşturulmazIntoSQL sütunlar üzerinde b-tree indeksleri yazar; diğerlerini yüklemeden sonra yeniden oluşturun.index_skipped
foreign keyssatırlardan sonra yabancı anahtarlarSatırlar herhangi bir sırada yüklenir ve anahtarlar onları sonradan denetler.
foreign keys to tables the dump doesn't createoluşturulmazBir anahtar, var olmayan bir tabloya başvuramaz.foreign_key_skipped
tables on a partition schemeher bölümün satırlarını içeren tek tabloSatırlar aynıdır; gerekiyorsa tabloyu PostgreSQL'de yeniden bölümleyin.partitions_dropped
temporal tables (SYSTEM_VERSIONING)iki tablo: mevcut satırlar ve geçmişTablo ve geçmiş tablosu düz tablolar olarak kopyalanır; PostgreSQL geçmişi kendisi tutmaz.system_versioning_dropped
NOT NULL columns with values that become NULLNOT NULL kaldırılırDeğerleri NULL olmak zorunda kalan bir sütun NOT NULL kısıtını koruyamaz, yoksa yükleme durur.not_null_relaxed
views, functions, procedures, triggers, synonyms, types and partition functionsraporda listelenirKodları T-SQL ile yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.not_converted_objects
scripts without CREATE TABLE (data only)değerlerden okunan türlerYalnızca veri içeren bir betikte yalnızca satırlar vardır, bu yüzden türler değerlerden gelir.no_schema
expressions in INSERT valuesNULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz.expression_value
types IntoSQL doesn't knowtextMetin her değeri tutar; yüklemeden sonra türü değiştirin.unknown_type
dates that aren't validNULLTarih olmayan bir değer NULL olur ve rapor onu sayar.date_out_of_range
NUL characters in textkaldırılırPostgreSQL'in metni NUL karakteri tutamaz. Karakter kaldırılır ve rapor bu değerleri sayar.nul_removed
text that isn't valid in its encodinghatalı baytlar yerine koyma karakteri olarakPostgreSQL metni geçerli UTF-8 olmalıdır.invalid_utf8_replaced
text decoded twice (ñ)olduğu gibi kopyalanırBetik tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.mojibake_suspected

Betiği PostgreSQL veritabanına yükleyin

Betik tabloları oluşturur, satırları kopyalar, ardından anahtarları, indeksleri ve yabancı anahtarları ekler; böylece hızlı yüklenir ve ilk hatada durur.

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

Yabancı anahtarlar NOT VALID olarak eklenir ve ardından doğrulanır. Bir satır var olmayan bir satıra işaret ediyorsa betik, yarı yolda başarısız olmak yerine hangi kısıtın sorunlu olduğunu söyler.

Büyük bir döküm için önce veritabanını oluşturun ve betiği sunucuyla aynı makinede psql ile çalıştırın.

IntoSQL Pro, dosyayı masaüstü uygulamasından veya komut satırından doğrudan PostgreSQL veritabanına yükler; betik yazmanız gerekmez.

En iyi sonuç için SQL Server dökümü nasıl alınır

Dönüştürücü, dökümün içerdiğini okur. Bu seçenekler verilerinizin daha fazlasını dökümde tutar:

  • SSMS'te veritabanına sağ tıklayın, Tasks, Generate Scripts'i seçin ve tabloları işaretleyin. dbatools, mssql-scripter ve aynı kitaplık üzerine kurulu diğer araçlar aynı betiği yazar.
  • Advanced altında Types of data to script ayarını Schema and data yapın. Yalnızca şemayı içeren bir betikte tablolar satırsızdır.
  • Betiği SSMS'in varsayılanı olan Unicode ya da UTF-8 olarak kaydedin: ikisi de aynı şekilde okunur, gzip de çalışır.

Neler dönüştürülmez

Görünümler, fonksiyonlar, saklı yordamlar, tetikleyiciler, eş anlamlılar, kurallar ve güvenlik ilkeleri T-SQL ile yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları PostgreSQL için yeniden yazabilirsiniz.

SQL Server - PostgreSQL dönüştürme hakkında sorular

Yanıtınızı bulamadınız mı? İletişim sayfasından bize yazın, bir kişi yanıt verir. İletişim sayfası

Dökümüm yükleniyor mu?

Hayır. Dönüştürücü tarayıcınızda çalışır ve dökümü diskinizden parça parça okur; böylece döküm bilgisayarınızdan hiç çıkmaz. Masaüstü uygulaması ve komut satırı da bilgisayarınızda dönüştürür.

Döküm ne kadar büyük olabilir?

Dönüştürücü dökümün tamamını asla bellekte tutmaz: dosyayı aralıklar halinde iki kez okur ve betiği ilerledikçe yazar. Birkaç gigabaytlık dökümler tarayıcıda, masaüstü uygulamasında ve komut satırıyla dönüştürülür.

SSMS'in kaydettiği UTF-16 dosyasını okuyor mu?

Evet. SSMS betikleri varsayılan olarak UTF-16 kaydeder ve dönüştürücü, gzip'li olsun olmasın, toplu işler arasında GO bulunan UTF-16 ve UTF-8 dosyalarını aynı şekilde okur.

Betik hangi SQL Server sürümlerinden gelebilir?

SSMS, dbatools veya mssql-scripter ile SQL Server 2017 ve sonrasından yazılmış betikler. Her test betiği SQL Server 2017, 2022 ve 2025'ten gelir ve kaynağıyla hücre hücre karşılaştırılır.

IDENTITY değerleri korunuyor mu?

Evet. IDENTITY sütunları kimlik sütunu olur, her satır kendi id'sini korur ve sonraki id en yüksek id'den sonra devam eder. Sequence'lar aynı seçeneklerle oluşturulur.

money, datetimeoffset ve diğer SQL Server türleri ne olur?

bit boolean, money numeric(19,4), uniqueidentifier uuid, xml xml, datetimeoffset ise timestamptz olur. datetime2 saniyenin altı basamağını korur, yedincisi kesilir. Büyük/küçük harfi yok sayan sütunlar tam karşılaştırır ve rapor hangileri olduğunu söyler.

Saklı yordamlar, tetikleyiciler ve görünümler ne olur?

Raporda adlarıyla listelenirler ve dönüştürülmezler, çünkü her veritabanı onları kendi dilinde yazar.

Betik hangi PostgreSQL sürümlerinde yüklenir?

PostgreSQL 13 ile 18 arası. Aynı betik her birinde yüklenir ve bir sorun çıkarsa ilk hatada durur.