İçeriğe geç
IntoSQL ana sayfası

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

pg_dump veya pg_dumpall ile alınmış düz bir dökümü .sql veya .sql.gz olarak bırakın ve aynı tablolar, anahtarlar, indeksler ve verilerle bir SQL Server betiği indirin. SQL Server'in olduğu gibi tutamadığı her değer ve taşımadığı her nesne raporda listelenir.

Dosyanız
sqlshop_2024_postgres.sqlÖrnek dosya, 6,2 kB
Veritabanınız

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

Göster

shop_2024_postgres.sql içindeki tablolarPostgreSQL 18.6 dökümü · pg_dump ile yazıldı · utf8mb4

  • customers8 satır1
    8 sütun
    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 satır1
    10 sütun
    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)

Dönüştürülmedi

  • Görünüm paid_orders

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

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

Düzeltmeler

  1. customers tablosunun "tags" sütunu text[]; SQL Server içinde bu tür yok, bu yüzden aynı değerlerle nvarchar(max) olur.
  2. orders tablosunun "delivery" sütunu interval; SQL Server içinde bu tür yok, bu yüzden aynı değerlerle nvarchar(100) olur.

Kontrol edilmeli

  • 1 görünüm, tetikleyici, rutin veya olay dönüştürülmedi; rapor her birini listeliyor. Bunları SQL Server'de elle yeniden oluşturun.
  • customers tablosundaki "tags" sütununun varsayılan değeri SQL Server için yazılamıyor (a value its type can't hold); bu yüzden sütunun varsayılan değeri yok. Yeni satırlar gerektiriyorsa varsayılan değeri elle ekleyin.
  • orders üzerindeki idx_orders_details indeksi SQL Server için yazılamayan bir ifade kullanıyor (an index on an expression); bu yüzden oluşturulmadı. Sorgular gerektiriyorsa indeksi elle oluşturun.
  • orders tablosunun "shipped_at" sütunundaki 1 değer, infinity gibi SQL Server'in saklayamadığı bir tarih; bu yüzden NULL yapıldı. SQL Server sonsuzluk olmadan 1 ile 9999 arası yılları saklar; bu tarihler önemliyse kaynakta değiştirin.

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

Diğer örnekler:

PostgreSQL ile SQL Server 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.

  • boolean

    bit

    bit, true'yu 1 ve false'u 0 olarak tutar.

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

    nvarchar(n); text nvarchar(max) olarak, bir anahtar kullanıyorsa ve her değer sığıyorsa nvarchar(450)

    nvarchar her karakteri tutar. SQL Server nvarchar(max) indeksleyemez, bu yüzden bir anahtardaki metin anahtara sığacak boyutta olur.

  • text comparison

    tam (Latin1_General_100_BIN2); citext büyük/küçük harfi yok sayar (Latin1_General_100_CI_AS_SC)

    SQL Server'ın olağan harmanlaması büyük/küçük harfi yok sayar, PostgreSQL'in metni saymaz; bu yüzden her sütun nasıl karşılaştırdığını belirtir ve benzersiz anahtarlar aynı satırları ayrı tutar.

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

    nvarchar; değerler 38 basamağa sığıyorsa onlara uyan decimal(p,s)

    SQL Server'ın decimal türü 38 basamak tutar. Duyarlılığı olmayan bir numeric, değerlerinin sığdığı en dar decimal'i alır; daha geniş sayılar her basamak tam kalsın diye metin olarak korunur.

    Rapor satırı: decimal_as_text

  • money

    decimal(19,2)

    SQL Server'ın money türü PostgreSQL'inkinden küçüktür ve dört ondalığı vardır; decimal(19,2), sunucunun yerel ayarının eklediği para birimi simgesi olmadan her tutarı tutar.

    Rapor satırı: type_replaced

  • interval

    PostgreSQL'in metniyle nvarchar(100)

    SQL Server'da interval türü yoktur; metin her parçayı korur.

    Rapor satırı: type_replaced

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

    JSON dizisiyle nvarchar(max)

    SQL Server'da dizi yoktur. Bir JSON dizisi her öğeyi ve NULL'u korur ve OPENJSON onu okur.

    Rapor satırı: type_replaced

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

    PostgreSQL'in metniyle nvarchar(max)

    SQL Server'da karşılık gelen bir tür yoktur, bu yüzden her değer PostgreSQL'in yazdığı metni korur.

    Rapor satırı: type_replaced

  • json, jsonb

    nvarchar(max)

    SQL Server'ın JSON fonksiyonları JSON'u metinden okur.

  • timestamp

    datetime2

    Saat dilimi olmayan bir timestamp, datetime2 gibi bir duvar saati okumasıdır.

  • timestamp with time zone

    UTC'de datetimeoffset

    datetimeoffset anı korur; her değer UTC'de yazılır, döküm hangi farkı yazmış olursa olsun an aynıdır.

  • time with 24:00:00 in it

    nvarchar(17)

    SQL Server'ın time türü 23:59:59.9999999'da biter, bu yüzden 24:00:00 tutan bir sütun metnini korur.

    Rapor satırı: time_as_interval

  • infinity, -infinity and BC dates

    NULL

    SQL Server sonsuzluk olmadan 1 ile 9999 arası yılları saklar. Bu değerler NULL olur ve rapor onları sayar.

    Rapor satırı: date_out_of_range

  • NaN and Infinity in numeric, real and double precision

    NULL

    SQL Server'ın sayılarında NaN veya Infinity yoktur, bu yüzden bu değerler NULL olur ve rapor onları sayar.

    Rapor satırı: invalid_value_null

  • 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

  • enum types

    etiketlerini denetleyen bir CHECK ile nvarchar

    CHECK ile metin aynı değerleri korur.

  • enum columns holding values outside their labels

    CHECK olmadan nvarchar

    Etiketlerde adı geçmeyen değerler CHECK'ten geçemez; bu yüzden CHECK oluşturulmaz.

    Rapor satırı: enum_check_skipped

  • uuid, inet, cidr, macaddr

    uniqueidentifier; adresler nvarchar olarak

    uniqueidentifier, SQL Server'ın UUID türüdür; adresler metin olarak korunur.

  • bytea

    varbinary(max)

    Baytlar bayt olarak kalır.

  • bit(n), bit varying

    tek bit için bit; 63 bite kadar bigint; ötesi metin basamakları

    Tek bir bit evet veya hayırdır; daha uzun bit dizileri bitlerinin oluşturduğu sayı olarak saklanır.

  • oid, xid, cid

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

    bigint her değeri tutar.

  • serial, identity

    en yüksek id'den sonra devam eden IDENTITY

    Kopyalanan id'ler IDENTITY_INSERT ile yüklenir ve sayaç, en yüksek id'den veya sequence'ın sonraki değerinden (hangisi büyükse) sonra devam eder.

  • a second serial or identity column in a table

    düz bir tam sayı

    SQL Server tablo başına tek IDENTITY sütunu sayar; diğerleri değerlerini sayaçsız korur.

    Rapor satırı: counter_dropped

  • sequences not owned by a column

    sonraki değeriyle CREATE SEQUENCE ... AS bigint

    SQL Server'da aynı seçeneklere sahip sequence'lar vardır; her biri dökümün bıraktığı yerden devam eder.

  • generated columns

    hesaplanan sütunlar, kaynak onları saklıyorsa PERSISTED

    SQL Server bunları aynı iki şekilde hesaplar.

  • generated columns with functions SQL Server lacks

    değerleriyle düz bir sütun

    SQL Server için yazılamayan bir formül, dökümün değerleriyle düz bir sütun ve bir rapor satırı bırakır.

    Rapor satırı: generated_not_translated

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

    varsayılan değer yok

    SQL Server 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, CREATE TABLE içinde satır içi

    Satır içi CHECK kısıtları her satır yüklenirken test edilir.

  • CHECK constraints with functions SQL Server lacks

    oluşturulmaz

    SQL Server 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 ... NOT VALID

    oluşturulmaz

    PostgreSQL daha önce var olan satırları hiç denetlemedi, bu yüzden satırlar onu ihlal edebilir.

    Rapor satırı: check_not_valid

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

    oluşturulmaz

    SQL Server ifadeleri değil sütunları indeksler, nvarchar(max) sütunlarını da indekslemez.

    Rapor satırı: index_skipped

  • foreign keys

    veriden sonra WITH NOCHECK, ardından yetim satırlar için uyarıyla denetlenir

    Anahtar satırlardan sonra oluşturulur ve en son denetlenir; üst satırı olmayan satırlar varsa yüklemeyi durdurmak yerine anahtar bir uyarıyla denetlenmemiş kalır.

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

    NO ACTION

    SQL Server bir tabloya iki kez ulaşabilecek zincirleme işlemleri reddeder; PostgreSQL bunlara izin verir.

    Rapor satırı: foreign_key_action_dropped

  • 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

  • partitioned tables

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

    Satırlar aynıdır; gerekiyorsa tabloyu SQL Server'da yeniden bölümleyin.

    Rapor satırı: partitions_dropped

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

    raporda listelenir

    Kodları PostgreSQL'in dilinde yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.

    Rapor satırı: not_converted_objects

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

    değerlerden okunan türler

    Yalnızca veri içeren bir dökümde 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

    nvarchar(max)

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

    Rapor satırı: unknown_type

  • text that isn't valid in its encoding

    hatalı baytlar yerine koyma karakteri olarak

    nvarchar Unicode metin tutar.

    Rapor satırı: invalid_utf8_replaced

  • text decoded twice (ñ)

    olduğu gibi kopyalanır

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

    Rapor satırı: mojibake_suspected

PostgreSQL içindeSQL Server içindeRapor satırı
booleanbitbit, true'yu 1 ve false'u 0 olarak tutar.
varchar(n), char(n), textnvarchar(n); text nvarchar(max) olarak, bir anahtar kullanıyorsa ve her değer sığıyorsa nvarchar(450)nvarchar her karakteri tutar. SQL Server nvarchar(max) indeksleyemez, bu yüzden bir anahtardaki metin anahtara sığacak boyutta olur.
text comparisontam (Latin1_General_100_BIN2); citext büyük/küçük harfi yok sayar (Latin1_General_100_CI_AS_SC)SQL Server'ın olağan harmanlaması büyük/küçük harfi yok sayar, PostgreSQL'in metni saymaz; bu yüzden her sütun nasıl karşılaştırdığını belirtir ve benzersiz anahtarlar aynı satırları ayrı tutar.
numeric(p,s) past 38 digits; numeric without a precisionnvarchar; değerler 38 basamağa sığıyorsa onlara uyan decimal(p,s)SQL Server'ın decimal türü 38 basamak tutar. Duyarlılığı olmayan bir numeric, değerlerinin sığdığı en dar decimal'i alır; daha geniş sayılar her basamak tam kalsın diye metin olarak korunur.decimal_as_text
moneydecimal(19,2)SQL Server'ın money türü PostgreSQL'inkinden küçüktür ve dört ondalığı vardır; decimal(19,2), sunucunun yerel ayarının eklediği para birimi simgesi olmadan her tutarı tutar.type_replaced
intervalPostgreSQL'in metniyle nvarchar(100)SQL Server'da interval türü yoktur; metin her parçayı korur.type_replaced
arrays (integer[], text[]...)JSON dizisiyle nvarchar(max)SQL Server'da dizi yoktur. Bir JSON dizisi her öğeyi ve NULL'u korur ve OPENJSON onu okur.type_replaced
ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension typesPostgreSQL'in metniyle nvarchar(max)SQL Server'da karşılık gelen bir tür yoktur, bu yüzden her değer PostgreSQL'in yazdığı metni korur.type_replaced
json, jsonbnvarchar(max)SQL Server'ın JSON fonksiyonları JSON'u metinden okur.
timestampdatetime2Saat dilimi olmayan bir timestamp, datetime2 gibi bir duvar saati okumasıdır.
timestamp with time zoneUTC'de datetimeoffsetdatetimeoffset anı korur; her değer UTC'de yazılır, döküm hangi farkı yazmış olursa olsun an aynıdır.
time with 24:00:00 in itnvarchar(17)SQL Server'ın time türü 23:59:59.9999999'da biter, bu yüzden 24:00:00 tutan bir sütun metnini korur.time_as_interval
infinity, -infinity and BC datesNULLSQL Server sonsuzluk olmadan 1 ile 9999 arası yılları saklar. Bu değerler NULL olur ve rapor onları sayar.date_out_of_range
NaN and Infinity in numeric, real and double precisionNULLSQL Server'ın sayılarında NaN veya Infinity yoktur, bu yüzden bu değerler NULL olur ve rapor onları sayar.invalid_value_null
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
enum typesetiketlerini denetleyen bir CHECK ile nvarcharCHECK ile metin aynı değerleri korur.
enum columns holding values outside their labelsCHECK olmadan nvarcharEtiketlerde adı geçmeyen değerler CHECK'ten geçemez; bu yüzden CHECK oluşturulmaz.enum_check_skipped
uuid, inet, cidr, macaddruniqueidentifier; adresler nvarchar olarakuniqueidentifier, SQL Server'ın UUID türüdür; adresler metin olarak korunur.
byteavarbinary(max)Baytlar bayt olarak kalır.
bit(n), bit varyingtek bit için bit; 63 bite kadar bigint; ötesi metin basamaklarıTek bir bit evet veya hayırdır; daha uzun bit dizileri bitlerinin oluşturduğu sayı olarak saklanır.
oid, xid, cidnegatif olmadığını denetleyen bir CHECK ile bigintbigint her değeri tutar.
serial, identityen yüksek id'den sonra devam eden IDENTITYKopyalanan id'ler IDENTITY_INSERT ile yüklenir ve sayaç, en yüksek id'den veya sequence'ın sonraki değerinden (hangisi büyükse) sonra devam eder.
a second serial or identity column in a tabledüz bir tam sayıSQL Server tablo başına tek IDENTITY sütunu sayar; diğerleri değerlerini sayaçsız korur.counter_dropped
sequences not owned by a columnsonraki değeriyle CREATE SEQUENCE ... AS bigintSQL Server'da aynı seçeneklere sahip sequence'lar vardır; her biri dökümün bıraktığı yerden devam eder.
generated columnshesaplanan sütunlar, kaynak onları saklıyorsa PERSISTEDSQL Server bunları aynı iki şekilde hesaplar.
generated columns with functions SQL Server lacksdeğerleriyle düz bir sütunSQL Server için yazılamayan bir formül, dökümün değerleriyle düz bir sütun ve bir rapor satırı bırakır.generated_not_translated
defaults with functions SQL Server lacks, and defaults from a sequencevarsayılan değer yokSQL Server için yazılamayan bir varsayılan değer dışarıda bırakılır ve raporlanır.default_not_translated
CHECK constraintsçevrilir, CREATE TABLE içinde satır içiSatır içi CHECK kısıtları her satır yüklenirken test edilir.
CHECK constraints with functions SQL Server lacksoluşturulmazSQL Server için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır.check_skipped
CHECK ... NOT VALIDoluşturulmazPostgreSQL daha önce var olan satırları hiç denetlemedi, bu yüzden satırlar onu ihlal edebilir.check_not_valid
gin, gist, brin and hash indexes, partial and expression indexes, and indexes on text that doesn't fit a keyoluşturulmazSQL Server ifadeleri değil sütunları indeksler, nvarchar(max) sütunlarını da indekslemez.index_skipped
foreign keysveriden sonra WITH NOCHECK, ardından yetim satırlar için uyarıyla denetlenirAnahtar satırlardan sonra oluşturulur ve en son denetlenir; üst satırı olmayan satırlar varsa yüklemeyi durdurmak yerine anahtar bir uyarıyla denetlenmemiş kalır.
ON DELETE or ON UPDATE that cascades in a cycle or along a second pathNO ACTIONSQL Server bir tabloya iki kez ulaşabilecek zincirleme işlemleri reddeder; PostgreSQL bunlara izin verir.foreign_key_action_dropped
foreign keys to tables the dump doesn't createoluşturulmazBir anahtar, var olmayan bir tabloya başvuramaz.foreign_key_skipped
partitioned tablesher bölümün satırlarını içeren tek tabloSatırlar aynıdır; gerekiyorsa tabloyu SQL Server'da yeniden bölümleyin.partitions_dropped
views, functions, procedures, triggers, rules, policies, extensions and typesraporda listelenirKodları PostgreSQL'in dilinde yazılmıştır, bu yüzden yeniden oluşturmanız için listelenirler.not_converted_objects
dumps without CREATE TABLE (--data-only)değerlerden okunan türlerYalnızca veri içeren bir dökümde 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 knownvarchar(max)Metin her değeri tutar; yüklemeden sonra türü değiştirin.unknown_type
text that isn't valid in its encodinghatalı baytlar yerine koyma karakteri olaraknvarchar Unicode metin tutar.invalid_utf8_replaced
text decoded twice (ñ)olduğu gibi kopyalanırDöküm tam olarak bu karakterleri içerir, bu yüzden kopyalanırlar; rapor onları gösterir.mojibake_suspected

Betiği SQL Server 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.

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

Yabancı anahtarlar WITH NOCHECK ile eklenir ve ardından denetlenir. Bir satır var olmayan bir satıra işaret ediyorsa betik, yarı yolda başarısız olmak yerine hangi kısıt olduğunu söyler ve onu denetlenmemiş bırakır.

Büyük bir döküm için sqlcmd'yi sunucuyla aynı makinede çalıştırın. En fazla 1000 satırlık her toplu iş kendi başına işlenir; böylece işlem günlüğü küçük kalır.

En iyi sonuç için PostgreSQL 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:

  • --format=plain, pg_dump'ın varsayılanı, SQL yazar. Custom veya directory arşivi (-Fc, -Fd), veritabanı sunucusu olmadan pg_restore -f dump.sql ile SQL'e çevrilir.
  • --no-owner --no-privileges rolleri ve yetkileri dışarıda bırakır; dönüştürücü bunları zaten atlar, böylece döküm küçülür.
  • pg_dumpall her veritabanını tek dosyaya döker; her birinin tablolarının adı onun adıyla başlar, böylece hiçbir şey çakışmaz.

Neler dönüştürülmez

Görünümler, somutlaştırılmış görünümler, fonksiyonlar, saklı yordamlar, tetikleyiciler, kurallar, satır güvenlik ilkeleri, eklentiler ve türler PostgreSQL'in kendi dilinde yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları SQL Server için yeniden yazabilirsiniz.

PostgreSQL - SQL Server 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.

pg_dump -Fc arşivlerini okuyor mu?

Doğrudan değil: custom arşiv ikili bir biçimdir. pg_restore -f dump.sql dump.backup, bir sunucuya bağlanmadan onu dönüştürücünün okuduğu düz SQL'e çevirir. Dönüştürücü bir arşiv aldığında bunu söyler.

Döküm hangi PostgreSQL sürümlerinden gelebilir?

PostgreSQL 10 ve sonrasından pg_dump ve pg_dumpall ile yazılmış, COPY veya INSERT satırları içeren dökümler. Her test dökümü PostgreSQL 13 ve 18'den gelir ve kaynağıyla hücre hücre karşılaştırılır.

serial ve identity değerleri korunuyor mu?

Evet. Her tablonun serial veya identity sütunu bir IDENTITY sütunu olur, her satır kendi id'sini korur ve sonraki id en yüksek id'den sonra devam eder. SQL Server tablo başına tek sütun sayar, bu yüzden diğerleri değerlerini sayaçsız korur.

Diziler, enum'lar ve diğer PostgreSQL türleri ne olur?

Diziler JSON dizisi, boolean'lar bit, uuid uniqueidentifier, saat dilimli timestamp'ler datetimeoffset olur. Metin PostgreSQL'deki gibi tam karşılaştırılır, citext ise büyük/küçük harfi yok sayar. Range'ler, geometrik türler ve bileşik türler PostgreSQL'in metnini korur.

Fonksiyonlar, 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 SQL Server sürümlerinde yüklenir?

SQL Server 2017 ile 2025 arası. Aynı betik her birinde yüklenir ve bir sorun çıkarsa ilk hatada durur.