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.
18 satır dönüştürüldü, 3 düzeltme, reddedilen yok
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 id integer not null customer_id integer not null status varchar(10) not null total numeric(19,4) not null items smallint not null ordered_at timestamp(0) not null shipped_at timestamp(6) note text details text order_ref uuid not null total_with_tax numeric(12,2) customers8 satır1
8 sütun id integer not null name varchar(100) not null email varchar(200) not null country varchar(2) not null is_active boolean not null signed_up date created_at timestamptz(0) not null row_version bytea
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
- orders tablosunun "items" sütunu işaretsiz; bu yüzden negatif olmadığını denetleyen bir CHECK ile smallint oldu.
- 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.
- 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çinde | PostgreSQL içinde | Rapor satırı |
|---|---|---|
| bit | booleanbit 1 ve 0 tutar; bunlar PostgreSQL'in true ve false değerleridir. | |
| tinyint | negatif 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), text | varchar(n) ve textPostgreSQL'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) olarakHer 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 kesilirPostgreSQL mikrosaniyeleri tutar; yedinci basamak (100 nanosaniye) yuvarlanmaz, kesilir, böylece hiçbir değer sonraki saniyeye veya güne kaymaz. | fraction_cut |
| datetimeoffset | timestamptz, aynı anlartimestamptz 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) | jsonbAynı JSON değerleri. | |
| uniqueidentifier | uuidAynı tanımlayıcılar, küçük harfle yazılır. | |
| binary, varbinary, image | byteaBaytlar bayt olarak kalır. | |
| geometry, geography | SQL Server'ın kendi baytlarıyla byteaSSMS uzamsal değerleri SQL Server'ın serileştirmesiyle yazar ve bu bayt bayt korunur. | 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. | rowversion_empty |
| sql_variant, hierarchyid, vector | textPostgreSQL'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 |
| IDENTITY | en 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 SEQUENCE | aynı 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 lacks | dü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 FOR | varsayı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 lacks | oluş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 disabled | oluşturulmazSQL Server bu CHECK kısıtlarını uygulamaz, bu yüzden satırlar onları ihlal edebilir. | check_not_enforced |
| filtered and columnstore indexes | oluşturulmazIntoSQL sütunlar üzerinde b-tree indeksleri yazar; diğerlerini yüklemeden sonra yeniden oluşturun. | index_skipped |
| foreign keys | satırlardan sonra yabancı anahtarlarSatırlar herhangi bir sırada yüklenir ve anahtarlar onları sonradan denetler. | |
| foreign keys to tables the dump doesn't create | oluşturulmazBir anahtar, var olmayan bir tabloya başvuramaz. | foreign_key_skipped |
| tables on a partition scheme | her 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 NULL | NOT 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 functions | raporda 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 values | NULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz. | expression_value |
| types IntoSQL doesn't know | textMetin her değeri tutar; yüklemeden sonra türü değiştirin. | unknown_type |
| dates that aren't valid | NULLTarih olmayan bir değer NULL olur ve rapor onu sayar. | date_out_of_range |
| NUL characters in text | kaldı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 encoding | hatalı 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.sqlYabancı 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.