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.
18 satır dönüştürüldü, 3 düzeltme, reddedilen yok
shop_2024_postgres.sql içindeki tablolarPostgreSQL 18.6 dökümü · pg_dump ile yazıldı · utf8mb4
customers8 satır2
8 sütun id int not null name text not null email varchar(768) not null country char(2) not null is_active tinyint(1) not null tags json not null signed_up date created_at datetime(6) not null orders10 satır1
10 sütun id int not null customer_id int not null status enum('pending','paid','shipped','cancelled') not null total decimal(10,2) not null items smallint not null ordered_at datetime(6) not null shipped_at datetime(6) note text details json delivery varchar(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
- 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.
- customers tablosunun "tags" sütunu text[]; MySQL içinde bu tür yok, bu yüzden aynı değerlerle json olur.
- 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çinde | MySQL içinde | Rapor satı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 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) holds | varcharMySQL'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 |
| 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. | 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. | 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 types | PostgreSQL'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, jsonb | jsonAynı 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. | 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 | NULLMySQL 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 precision | NULLMySQL'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 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 |
| 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) olarakMySQL'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 text64 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ı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, identity | en 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 table | dü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 column | oluşturulmazMySQL'de sequence yoktur. Bir sequence ile sayan sütunlar bunun yerine AUTO_INCREMENT olur. | sequence_not_converted |
| generated columns | kaynaktaki gibi STORED üretilen sütunlarMySQL bunları aynı şekilde hesaplar. | |
| generated columns with functions MySQL lacks | dü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 sequence | varsayı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 lacks | oluşturulmazMySQL için yazılamayan bir CHECK kısıtı dışarıda bırakılır ve raporlanır. | check_skipped |
| CHECK ... NOT VALID | oluş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 | oluşturulmazMySQL'de yalnızca tüm sütunlar üzerinde, WHERE olmadan b-tree, tam metin ve uzamsal indeksler vardır. | index_skipped |
| foreign keys | FOREIGN_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 create | oluşturulmazBir anahtar, var olmayan bir tabloya başvuramaz. | foreign_key_skipped |
| partitioned tables | her 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 |
| schemas | tek 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 types | raporda 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 values | NULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz. | expression_value |
| types IntoSQL doesn't know | longtextMetin her değeri tutar; yüklemeden sonra türü değiştirin. | unknown_type |
| text that isn't valid in its encoding | hatalı 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.sqlYabancı 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.