İçeriğe geç
IntoSQL ana sayfası

PostgreSQL - MySQL 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 MySQL betiği indirin. MySQL'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ü, 3 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ır2
    8 sütun
    idint not null
    nametext not null
    emailvarchar(768) not null
    countrychar(2) not null
    is_activetinyint(1) not null
    tagsjson not null
    signed_update
    created_atdatetime(6) not null
  • orders10 satır1
    10 sütun
    idint not null
    customer_idint not null
    statusenum('pending','paid','shipped','cancelled') not null
    totaldecimal(10,2) not null
    itemssmallint not null
    ordered_atdatetime(6) not null
    shipped_atdatetime(6)
    notetext
    detailsjson
    deliveryvarchar(100)

Dönüştürülmedi

  • Görünüm paid_orders

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

-- Written by IntoSQL from a PostgreSQL dump. Load it with: mysql --default-character-set=utf8mb4 <database> < <file>
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO,ALLOW_INVALID_DATES';

CREATE TABLE `customers` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` text NOT NULL,
  `email` varchar(768) NOT NULL,
  `country` char(2) NOT NULL DEFAULT 'US',
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `tags` json NOT NULL,
  `signed_up` date,
  `created_at` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
  UNIQUE KEY `customers_email_key` (`email`),
  PRIMARY KEY (`id`)
) AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='People who bought at least once';

CREATE TABLE `orders` (
  `id` int NOT NULL AUTO_INCREMENT,
  `customer_id` int NOT NULL,
  `status` enum('pending','paid','shipped','cancelled') NOT NULL DEFAULT 'pending',
  `total` decimal(10,2) NOT NULL,
  `items` smallint NOT NULL DEFAULT 1,
  `ordered_at` datetime(6) NOT NULL,
  `shipped_at` datetime(6),
  `note` text,
  `details` json,
  `delivery` varchar(100),
  PRIMARY KEY (`id`),
  KEY `idx_orders_customer` (`customer_id`),
  KEY `idx_orders_status_date` (`status`,`ordered_at`),
  CONSTRAINT `orders_total_check` CHECK (`total` >= (0)),
  CONSTRAINT `orders_customer_id_fkey` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`id`)
) AUTO_INCREMENT=5001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

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

SET UNIQUE_CHECKS = 1;
SET FOREIGN_KEY_CHECKS = 1;

Düzeltmeler

  1. customers tablosunun "created_at" sütunu saat dilimli anlar içeriyor; MySQL'de bunu koruyan bir tür yok, bu yüzden datetime(6) olarak UTC'de saklanır.
  2. customers tablosunun "tags" sütunu text[]; MySQL içinde bu tür yok, bu yüzden aynı değerlerle json olur.
  3. orders tablosunun "delivery" sütunu interval; MySQL içinde bu tür yok, bu yüzden aynı değerlerle varchar(100) olur.

Kontrol edilmeli

  • 1 görünüm, tetikleyici, rutin veya olay dönüştürülmedi; rapor her birini listeliyor. Bunları MySQL'de elle yeniden oluşturun.
  • customers tablosundaki "tags" sütununun varsayılan değeri MySQL 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 MySQL için yazılamayan bir ifade kullanıyor (neither MySQL 5.7 nor MariaDB index an expression); bu yüzden oluşturulmadı. Sorgular gerektiriyorsa indeksi elle oluşturun.
  • orders tablosunun "shipped_at" sütunundaki 1 değer, infinity gibi MySQL'in saklayamadığı bir tarih; bu yüzden NULL yapıldı. MySQL 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 MySQL 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

    tinyint(1)

    MySQL'in BOOLEAN türü TINYINT(1)'dir: true 1, false 0'dır.

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

    1024 karaktere kadar varchar(n), 255'e kadar char(n), ötesi text

    Metin her karakteri utf8mb4 olarak korur. Bir anahtardaki sütun en fazla varchar(768) olur; bir anahtarın tutabildiği en uzun değer budur. Varsayılan değeri olan metin de öyledir, çünkü MySQL 5.7 varsayılan değeri yalnızca varchar'a verir.

  • numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holds

    varchar

    MySQL'in decimal türü 30 ondalıkla 65 basamak tutar. Daha geniş sayılar her basamak tam kalsın diye metin olarak korunur; duyarlılığı olmayan numeric, değerleri sığıyorsa decimal(65,30) olur.

    Rapor satırı: decimal_as_text

  • money

    decimal(19,2)

    MySQL'de para türü yoktur. Tutar, sunucunun yerel ayarının eklediği para birimi simgesi olmadan sayı olarak korunur.

    Rapor satırı: type_replaced

  • interval

    PostgreSQL'in metniyle varchar(100)

    MySQL'in TIME türü 838 saate kadar süre tutar, ama bir interval ay ve gün içerir; metni her parçayı korur.

    Rapor satırı: type_replaced

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

    json dizileri

    MySQL'de dizi yoktur. Bir JSON dizisi her öğeyi ve NULL'u korur ve JSON fonksiyonları onu okur.

    Rapor satırı: type_replaced

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

    PostgreSQL'in metniyle longtext

    MySQL'de 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

    json

    Aynı JSON değerleri; jsonb'nin anahtar sırası ve boşlukları sunucunun belirlediği gibidir.

  • timestamp

    datetime(p)

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

  • timestamp with time zone

    UTC'de datetime(p)

    MySQL'in TIMESTAMP türü yalnızca 2038'e kadar ulaşır, bu yüzden anlar UTC'de datetime olarak saklanır; döküm hangi farkı yazmış olursa olsun an aynıdır.

    Rapor satırı: moments_as_utc

  • time

    time(p)

    MySQL'in TIME türü, 24:00:00 dahil, günün her saatini tutar.

  • infinity, -infinity, BC dates and years past 9999

    NULL

    MySQL sonsuzluk olmadan 1000 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

    MySQL'in 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

    aynı etiketlerle enum(...)

    MySQL'in ENUM türü etiketleri sıralarıyla korur.

  • uuid, inet, cidr

    uuid char(36) olarak, inet ve cidr varchar(43) olarak

    MySQL'de uuid veya adres türleri yoktur; metin her değeri korur.

  • bytea

    blob, mediumblob veya longblob; bir anahtarda varbinary(3072)

    Baytlar bayt olarak kalır.

  • bit(n)

    64'e kadar bit(n), ötesi text

    64 bite kadar bir bit dizisi, bitlerinin oluşturduğu sayıdır; daha uzunu basamaklarını korur.

  • citext and nondeterministic collations

    tam karşılaştırma

    Tablolar utf8mb4_bin kullanır, böylece metin PostgreSQL'deki gibi tam karşılaştırılır; kaynakta büyük/küçük harfi yok sayan sütunlar bunu kaybeder.

    Rapor satırı: case_insensitive_collation

  • serial, identity

    en yüksek id'den sonra devam eden AUTO_INCREMENT

    Birincil anahtarın başındaki sütun sayar; sayaç sequence'ın kaldığı yerden devam eder.

  • a second serial or identity column in a table

    düz tam sayı

    MySQL tablo başına tek sütun sayar; diğerleri değerlerini sayaçsız korur.

    Rapor satırı: counter_dropped

  • sequences not owned by a column

    oluşturulmaz

    MySQL'de sequence yoktur. Bir sequence ile sayan sütunlar bunun yerine AUTO_INCREMENT olur.

    Rapor satırı: sequence_not_converted

  • generated columns

    kaynaktaki gibi STORED üretilen sütunlar

    MySQL bunları aynı şekilde hesaplar.

  • generated columns with functions MySQL lacks

    düz bir sütun

    MySQL için yazılamayan bir formül, düz bir sütun ve bir rapor satırı bırakır.

    Rapor satırı: generated_not_translated

  • defaults with functions MySQL lacks, and defaults from a sequence

    varsayılan değer yok

    MySQL 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

    MySQL 8.0.16 ve MariaDB bunları uygular; MySQL 5.7 denetlemeden tutar.

  • CHECK constraints with functions MySQL lacks

    oluşturulmaz

    MySQL 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

    oluşturulmaz

    MySQL'de yalnızca tüm sütunlar üzerinde, WHERE olmadan b-tree, tam metin ve uzamsal indeksler vardır.

    Rapor satırı: index_skipped

  • foreign keys

    FOREIGN_KEY_CHECKS=0 ile yüklenen yabancı anahtarlar

    Satırlar herhangi bir sırayla yüklenir, anahtarlar sonrasında yeni satırları 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

  • partitioned tables

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

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

    Rapor satırı: partitions_dropped

  • schemas

    tek veritabanı, tabloların adı önce şemalarının adıyla başlar

    MySQL'in şemaları veritabanlarıdır ve tek bir veritabanına yüklenen bir betik bunları oluşturamaz; public içindeki tablolar adlarını korur.

    Rapor satırı: schemas_merged

  • 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

    longtext

    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

    Metin geçerli utf8mb4 olmalıdır.

    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çindeMySQL içindeRapor satırı
booleantinyint(1)MySQL'in BOOLEAN türü TINYINT(1)'dir: true 1, false 0'dır.
varchar(n), char(n), text1024 karaktere kadar varchar(n), 255'e kadar char(n), ötesi textMetin her karakteri utf8mb4 olarak korur. Bir anahtardaki sütun en fazla varchar(768) olur; bir anahtarın tutabildiği en uzun değer budur. Varsayılan değeri olan metin de öyledir, çünkü MySQL 5.7 varsayılan değeri yalnızca varchar'a verir.
numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holdsvarcharMySQL'in decimal türü 30 ondalıkla 65 basamak tutar. Daha geniş sayılar her basamak tam kalsın diye metin olarak korunur; duyarlılığı olmayan numeric, değerleri sığıyorsa decimal(65,30) olur.decimal_as_text
moneydecimal(19,2)MySQL'de para türü yoktur. Tutar, sunucunun yerel ayarının eklediği para birimi simgesi olmadan sayı olarak korunur.type_replaced
intervalPostgreSQL'in metniyle varchar(100)MySQL'in TIME türü 838 saate kadar süre tutar, ama bir interval ay ve gün içerir; metni her parçayı korur.type_replaced
arrays (integer[], text[]...)json dizileriMySQL'de dizi yoktur. Bir JSON dizisi her öğeyi ve NULL'u korur ve JSON fonksiyonları onu okur.type_replaced
ranges, geometric types, tsvector, xml, hstore, composite and extension typesPostgreSQL'in metniyle longtextMySQL'de karşılık gelen bir tür yoktur, bu yüzden her değer PostgreSQL'in yazdığı metni korur.type_replaced
json, jsonbjsonAynı JSON değerleri; jsonb'nin anahtar sırası ve boşlukları sunucunun belirlediği gibidir.
timestampdatetime(p)Saat dilimi olmayan bir timestamp, datetime gibi bir duvar saati okumasıdır.
timestamp with time zoneUTC'de datetime(p)MySQL'in TIMESTAMP türü yalnızca 2038'e kadar ulaşır, bu yüzden anlar UTC'de datetime olarak saklanır; döküm hangi farkı yazmış olursa olsun an aynıdır.moments_as_utc
timetime(p)MySQL'in TIME türü, 24:00:00 dahil, günün her saatini tutar.
infinity, -infinity, BC dates and years past 9999NULLMySQL sonsuzluk olmadan 1000 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 precisionNULLMySQL'in 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 typesaynı etiketlerle enum(...)MySQL'in ENUM türü etiketleri sıralarıyla korur.
uuid, inet, cidruuid char(36) olarak, inet ve cidr varchar(43) olarakMySQL'de uuid veya adres türleri yoktur; metin her değeri korur.
byteablob, mediumblob veya longblob; bir anahtarda varbinary(3072)Baytlar bayt olarak kalır.
bit(n)64'e kadar bit(n), ötesi text64 bite kadar bir bit dizisi, bitlerinin oluşturduğu sayıdır; daha uzunu basamaklarını korur.
citext and nondeterministic collationstam karşılaştırmaTablolar utf8mb4_bin kullanır, böylece metin PostgreSQL'deki gibi tam karşılaştırılır; kaynakta büyük/küçük harfi yok sayan sütunlar bunu kaybeder.case_insensitive_collation
serial, identityen yüksek id'den sonra devam eden AUTO_INCREMENTBirincil anahtarın başındaki sütun sayar; sayaç sequence'ın kaldığı yerden devam eder.
a second serial or identity column in a tabledüz tam sayıMySQL tablo başına tek sütun sayar; diğerleri değerlerini sayaçsız korur.counter_dropped
sequences not owned by a columnoluşturulmazMySQL'de sequence yoktur. Bir sequence ile sayan sütunlar bunun yerine AUTO_INCREMENT olur.sequence_not_converted
generated columnskaynaktaki gibi STORED üretilen sütunlarMySQL bunları aynı şekilde hesaplar.
generated columns with functions MySQL lacksdüz bir sütunMySQL için yazılamayan bir formül, düz bir sütun ve bir rapor satırı bırakır.generated_not_translated
defaults with functions MySQL lacks, and defaults from a sequencevarsayılan değer yokMySQL 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çiMySQL 8.0.16 ve MariaDB bunları uygular; MySQL 5.7 denetlemeden tutar.
CHECK constraints with functions MySQL lacksoluşturulmazMySQL 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 indexesoluşturulmazMySQL'de yalnızca tüm sütunlar üzerinde, WHERE olmadan b-tree, tam metin ve uzamsal indeksler vardır.index_skipped
foreign keysFOREIGN_KEY_CHECKS=0 ile yüklenen yabancı anahtarlarSatırlar herhangi bir sırayla yüklenir, anahtarlar sonrasında yeni satırları denetler.
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 MySQL'de yeniden bölümleyin.partitions_dropped
schemastek veritabanı, tabloların adı önce şemalarının adıyla başlarMySQL'in şemaları veritabanlarıdır ve tek bir veritabanına yüklenen bir betik bunları oluşturamaz; public içindeki tablolar adlarını korur.schemas_merged
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 knowlongtextMetin 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 olarakMetin geçerli utf8mb4 olmalıdır.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 MySQL 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.

mysql --default-character-set=utf8mb4 mydb < postgresql.mysql.sql

Yabancı anahtarlar dökümün tanımladığı şekilde, satırlar yüklenirken FOREIGN_KEY_CHECKS=0 ile oluşturulur; böylece var olmayan bir satıra işaret eden bir satır yüklemeyi durdurmaz.

Büyük bir döküm için istemciyi sunucuyla aynı makinede çalıştırın ve tek bir satır çok büyükse max_allowed_packet değerini artırın.

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

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ı MySQL için yeniden yazabilirsiniz.

PostgreSQL - MySQL 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, tablo başına bir sütun için: birincil anahtarın başındaki serial veya identity sütunu AUTO_INCREMENT olur ve en yüksek id'den sonra devam eder. MySQL tablo başına tek sütun sayar, bu yüzden diğerleri değerlerini sayaçsız korur ve rapor bunu belirtir.

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

Diziler JSON dizisi, boolean'lar tinyint(1), enum'lar aynı etiketlerle ENUM, money ise decimal olur. Range'ler, geometrik türler, hstore ve bileşik türler PostgreSQL'in metnini korur ve rapor hangi sütunlar olduğunu söyler.

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 MySQL sürümlerinde yüklenir?

MySQL 5.7 ve sonrası. Her test dökümü 5.7 ve 9 üzerinde yüklenir ve bir sorun çıkarsa ilk hatada durur.