Konwertuj PostgreSQL do MySQL
Upuść zwykły zrzut z pg_dump lub pg_dumpall jako .sql lub .sql.gz i pobierz skrypt MySQL z tymi samymi tabelami, kluczami, indeksami i danymi. Każda wartość, której MySQL nie może przechować bez zmian, i każdy obiekt, którego nie przenosi, są wymienione w raporcie.
18 wierszy przekonwertowanych, 3 poprawki, brak odrzuconych
Tabele w pliku shop_2024_postgres.sqlZrzut PostgreSQL 18.6 · zapisany przez pg_dump · utf8mb4
customers8 wierszy2
8 kolumn 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 wierszy1
10 kolumn 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)
Nieprzekonwertowane
- Widok paid_orders
Każda baza danych zapisuje je we własnym języku. Przepisz je dla MySQL.
-- 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;
Poprawki
- "created_at" tabeli customers zawiera momenty ze strefą czasową; MySQL nie ma typu, który ją zachowuje, więc są zapisywane w UTC jako datetime(6).
- "tags" w tabeli customers to text[], czego MySQL nie ma, więc ma typ json z tymi samymi wartościami.
- "delivery" w tabeli orders to interval, czego MySQL nie ma, więc ma typ varchar(100) z tymi samymi wartościami.
Do sprawdzenia
- Widoki, wyzwalacze, procedury i zdarzenia nie są konwertowane: 1 obiekt, każdy wymieniony w raporcie. Utwórz je ręcznie w MySQL.
- Wartości domyślnej "tags" w tabeli customers nie da się zapisać dla MySQL (a value its type can't hold), więc kolumna nie ma wartości domyślnej. Dodaj wartość domyślną ręcznie, jeśli nowe wiersze jej potrzebują.
- Indeks idx_orders_details w tabeli orders używa wyrażenia, którego nie da się zapisać dla MySQL (neither MySQL 5.7 nor MariaDB index an expression), więc go nie utworzono. Utwórz indeks ręcznie, jeśli zapytania go potrzebują.
- W "shipped_at" tabeli orders 1 data poza zakresem MySQL, np. infinity, staje się NULL. MySQL przechowuje lata od 1 do 9999 bez nieskończoności; jeśli te daty są ważne, zastąp je w źródle.
Plik jest konwertowany na tym komputerze i nigdy nie jest wysyłany.
Inne przykłady:
Co zmienia się między PostgreSQL a MySQL
Każdy wiersz to reguła stosowana przez konwerter, z wpisem, który dodaje do raportu, gdy reguła coś zmienia w twoich danych.
boolean
tinyint(1)
BOOLEAN w MySQL to TINYINT(1): true to 1, a false to 0.
varchar(n), char(n), text
varchar(n) do 1024 znaków, char(n) do 255, powyżej text
Tekst zachowuje każdy znak jako utf8mb4. Kolumna w kluczu to najwyżej varchar(768), najdłuższa, jaką mieści klucz, i tak samo tekst z wartością domyślną, którą MySQL 5.7 nadaje tylko typowi varchar.
numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holds
varchar
decimal w MySQL mieści 65 cyfr, w tym 30 po przecinku. Szersze liczby są zapisywane jako tekst, aby każda cyfra pozostała dokładna; numeric bez precyzji to decimal(65,30), gdy jego wartości się mieszczą.
Wpis w raporcie: decimal_as_text
money
decimal(19,2)
MySQL nie ma typu money. Kwota jest zapisywana jako liczba, bez symbolu waluty dodanego przez ustawienia regionalne serwera.
Wpis w raporcie: type_replaced
interval
varchar(100) z tekstem PostgreSQL
TIME w MySQL mieści czasy trwania do 838 godzin, ale interval ma miesiące i dni; jego tekst zachowuje każdą część.
Wpis w raporcie: type_replaced
arrays (integer[], text[]...)
tablice json
MySQL nie ma tablic. Tablica JSON zachowuje każdy element i NULL, a funkcje JSON ją odczytują.
Wpis w raporcie: type_replaced
ranges, geometric types, tsvector, xml, hstore, composite and extension types
longtext z tekstem PostgreSQL
MySQL nie ma odpowiedniego typu, więc każda wartość zachowuje tekst zapisany przez PostgreSQL.
Wpis w raporcie: type_replaced
json, jsonb
json
Te same wartości JSON; kolejność kluczy i odstępy jsonb są takie, jak ustalił serwer.
timestamp
datetime(p)
timestamp bez strefy czasowej to wskazanie zegara, jak datetime.
timestamp with time zone
datetime(p) w UTC
TIMESTAMP w MySQL sięga tylko roku 2038, więc momenty są zapisywane jako datetime w UTC, ten sam moment niezależnie od przesunięcia w zrzucie.
Wpis w raporcie: moments_as_utc
time
time(p)
TIME w MySQL mieści każdą godzinę dnia, łącznie z 24:00:00.
infinity, -infinity, BC dates and years past 9999
NULL
MySQL przechowuje lata od 1000 do 9999 bez nieskończoności. Te wartości stają się NULL, a raport je liczy.
Wpis w raporcie: date_out_of_range
NaN and Infinity in numeric, real and double precision
NULL
Liczby w MySQL nie mają NaN ani Infinity, więc te wartości stają się NULL, a raport je liczy.
Wpis w raporcie: invalid_value_null
NOT NULL columns with values that become NULL
NOT NULL usunięte
Kolumna, której wartości musiały stać się NULL, nie może zachować NOT NULL, bo ładowanie by się zatrzymało.
Wpis w raporcie: not_null_relaxed
enum types
enum(...) z tymi samymi etykietami
ENUM w MySQL zachowuje etykiety w ich kolejności.
uuid, inet, cidr
uuid jako char(36), inet i cidr jako varchar(43)
MySQL nie ma typów uuid ani adresów; tekst zachowuje każdą wartość.
bytea
blob, mediumblob lub longblob; varbinary(3072) w kluczu
Bajty pozostają bajtami.
bit(n)
bit(n) do 64, powyżej tekst
Ciąg bitów do 64 bitów to liczba, którą tworzą jego bity; dłuższy zachowuje swoje cyfry.
citext and nondeterministic collations
dokładne porównanie
Tabele używają utf8mb4_bin, więc tekst jest porównywany dokładnie, jak w PostgreSQL; kolumny, które w źródle ignorowały wielkość liter, to tracą.
Wpis w raporcie: case_insensitive_collation
serial, identity
AUTO_INCREMENT, kontynuowane po najwyższym id
Liczy kolumna, która zaczyna klucz główny; licznik idzie dalej od miejsca, w którym była sekwencja.
a second serial or identity column in a table
zwykła liczba całkowita
MySQL liczy jedną kolumnę na tabelę; każda inna zachowuje wartości bez licznika.
Wpis w raporcie: counter_dropped
sequences not owned by a column
nie jest tworzone
MySQL nie ma sekwencji. Kolumny, które z nich liczą, stają się zamiast tego AUTO_INCREMENT.
Wpis w raporcie: sequence_not_converted
generated columns
kolumny generowane, STORED jak w źródle
MySQL oblicza je tak samo.
generated columns with functions MySQL lacks
zwykła kolumna
Formuła, której nie da się zapisać dla MySQL, zostawia zwykłą kolumnę i wpis w raporcie.
Wpis w raporcie: generated_not_translated
defaults with functions MySQL lacks, and defaults from a sequence
brak wartości domyślnej
Wartość domyślna, której nie da się zapisać dla MySQL, jest pomijana i zgłaszana w raporcie.
Wpis w raporcie: default_not_translated
CHECK constraints
przetłumaczone, wewnątrz CREATE TABLE
MySQL 8.0.16 i MariaDB je stosują; MySQL 5.7 przechowuje je bez sprawdzania.
CHECK constraints with functions MySQL lacks
nie jest tworzone
Ograniczenie CHECK, którego nie da się zapisać dla MySQL, jest pomijane i zgłaszane w raporcie.
Wpis w raporcie: check_skipped
CHECK ... NOT VALID
nie jest tworzone
PostgreSQL nigdy nie sprawdził wierszy, które były wcześniej, więc mogą je łamać.
Wpis w raporcie: check_not_valid
gin, gist, brin and hash indexes, partial and expression indexes
nie jest tworzone
MySQL ma tylko indeksy b-tree, pełnotekstowe i przestrzenne, na całych kolumnach, bez WHERE.
Wpis w raporcie: index_skipped
foreign keys
klucze obce, ładowane z FOREIGN_KEY_CHECKS=0
Wiersze ładują się w dowolnej kolejności, a klucze sprawdzają potem nowe wiersze.
foreign keys to tables the dump doesn't create
nie jest tworzone
Klucz nie może wskazywać tabeli, której nie ma.
Wpis w raporcie: foreign_key_skipped
partitioned tables
jedna tabela z wierszami wszystkich partycji
Wiersze są te same; jeśli trzeba, podziel tabelę na partycje ponownie w MySQL.
Wpis w raporcie: partitions_dropped
schemas
jedna baza danych, nazwa każdej tabeli zaczyna się od nazwy jej schematu
Schematy w MySQL to bazy danych, których skrypt ładowany do jednej bazy nie może utworzyć; tabele z public zachowują nazwy.
Wpis w raporcie: schemas_merged
views, functions, procedures, triggers, rules, policies, extensions and types
wymienione w raporcie
Ich kod jest napisany w języku PostgreSQL, więc trafiają na listę do ręcznego odtworzenia.
Wpis w raporcie: not_converted_objects
dumps without CREATE TABLE (--data-only)
typy odczytane z wartości
Zrzut samych danych zawiera tylko wiersze, więc typy pochodzą z wartości.
Wpis w raporcie: no_schema
expressions in INSERT values
NULL
Konwerter, który nie uruchamia bazy danych, nie może ich obliczyć.
Wpis w raporcie: expression_value
types IntoSQL doesn't know
longtext
Tekst mieści każdą wartość; zmień typ po załadowaniu.
Wpis w raporcie: unknown_type
text that isn't valid in its encoding
błędne bajty jako znak zastępczy
Tekst musi być poprawnym utf8mb4.
Wpis w raporcie: invalid_utf8_replaced
text decoded twice (ñ)
skopiowane bez zmian
Zrzut zawiera dokładnie te znaki, więc są kopiowane; raport je wskazuje.
Wpis w raporcie: mojibake_suspected
| W PostgreSQL | W MySQL | Wpis w raporcie |
|---|---|---|
| boolean | tinyint(1)BOOLEAN w MySQL to TINYINT(1): true to 1, a false to 0. | |
| varchar(n), char(n), text | varchar(n) do 1024 znaków, char(n) do 255, powyżej textTekst zachowuje każdy znak jako utf8mb4. Kolumna w kluczu to najwyżej varchar(768), najdłuższa, jaką mieści klucz, i tak samo tekst z wartością domyślną, którą MySQL 5.7 nadaje tylko typowi varchar. | |
| numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holds | varchardecimal w MySQL mieści 65 cyfr, w tym 30 po przecinku. Szersze liczby są zapisywane jako tekst, aby każda cyfra pozostała dokładna; numeric bez precyzji to decimal(65,30), gdy jego wartości się mieszczą. | decimal_as_text |
| money | decimal(19,2)MySQL nie ma typu money. Kwota jest zapisywana jako liczba, bez symbolu waluty dodanego przez ustawienia regionalne serwera. | type_replaced |
| interval | varchar(100) z tekstem PostgreSQLTIME w MySQL mieści czasy trwania do 838 godzin, ale interval ma miesiące i dni; jego tekst zachowuje każdą część. | type_replaced |
| arrays (integer[], text[]...) | tablice jsonMySQL nie ma tablic. Tablica JSON zachowuje każdy element i NULL, a funkcje JSON ją odczytują. | type_replaced |
| ranges, geometric types, tsvector, xml, hstore, composite and extension types | longtext z tekstem PostgreSQLMySQL nie ma odpowiedniego typu, więc każda wartość zachowuje tekst zapisany przez PostgreSQL. | type_replaced |
| json, jsonb | jsonTe same wartości JSON; kolejność kluczy i odstępy jsonb są takie, jak ustalił serwer. | |
| timestamp | datetime(p)timestamp bez strefy czasowej to wskazanie zegara, jak datetime. | |
| timestamp with time zone | datetime(p) w UTCTIMESTAMP w MySQL sięga tylko roku 2038, więc momenty są zapisywane jako datetime w UTC, ten sam moment niezależnie od przesunięcia w zrzucie. | moments_as_utc |
| time | time(p)TIME w MySQL mieści każdą godzinę dnia, łącznie z 24:00:00. | |
| infinity, -infinity, BC dates and years past 9999 | NULLMySQL przechowuje lata od 1000 do 9999 bez nieskończoności. Te wartości stają się NULL, a raport je liczy. | date_out_of_range |
| NaN and Infinity in numeric, real and double precision | NULLLiczby w MySQL nie mają NaN ani Infinity, więc te wartości stają się NULL, a raport je liczy. | invalid_value_null |
| NOT NULL columns with values that become NULL | NOT NULL usunięteKolumna, której wartości musiały stać się NULL, nie może zachować NOT NULL, bo ładowanie by się zatrzymało. | not_null_relaxed |
| enum types | enum(...) z tymi samymi etykietamiENUM w MySQL zachowuje etykiety w ich kolejności. | |
| uuid, inet, cidr | uuid jako char(36), inet i cidr jako varchar(43)MySQL nie ma typów uuid ani adresów; tekst zachowuje każdą wartość. | |
| bytea | blob, mediumblob lub longblob; varbinary(3072) w kluczuBajty pozostają bajtami. | |
| bit(n) | bit(n) do 64, powyżej tekstCiąg bitów do 64 bitów to liczba, którą tworzą jego bity; dłuższy zachowuje swoje cyfry. | |
| citext and nondeterministic collations | dokładne porównanieTabele używają utf8mb4_bin, więc tekst jest porównywany dokładnie, jak w PostgreSQL; kolumny, które w źródle ignorowały wielkość liter, to tracą. | case_insensitive_collation |
| serial, identity | AUTO_INCREMENT, kontynuowane po najwyższym idLiczy kolumna, która zaczyna klucz główny; licznik idzie dalej od miejsca, w którym była sekwencja. | |
| a second serial or identity column in a table | zwykła liczba całkowitaMySQL liczy jedną kolumnę na tabelę; każda inna zachowuje wartości bez licznika. | counter_dropped |
| sequences not owned by a column | nie jest tworzoneMySQL nie ma sekwencji. Kolumny, które z nich liczą, stają się zamiast tego AUTO_INCREMENT. | sequence_not_converted |
| generated columns | kolumny generowane, STORED jak w źródleMySQL oblicza je tak samo. | |
| generated columns with functions MySQL lacks | zwykła kolumnaFormuła, której nie da się zapisać dla MySQL, zostawia zwykłą kolumnę i wpis w raporcie. | generated_not_translated |
| defaults with functions MySQL lacks, and defaults from a sequence | brak wartości domyślnejWartość domyślna, której nie da się zapisać dla MySQL, jest pomijana i zgłaszana w raporcie. | default_not_translated |
| CHECK constraints | przetłumaczone, wewnątrz CREATE TABLEMySQL 8.0.16 i MariaDB je stosują; MySQL 5.7 przechowuje je bez sprawdzania. | |
| CHECK constraints with functions MySQL lacks | nie jest tworzoneOgraniczenie CHECK, którego nie da się zapisać dla MySQL, jest pomijane i zgłaszane w raporcie. | check_skipped |
| CHECK ... NOT VALID | nie jest tworzonePostgreSQL nigdy nie sprawdził wierszy, które były wcześniej, więc mogą je łamać. | check_not_valid |
| gin, gist, brin and hash indexes, partial and expression indexes | nie jest tworzoneMySQL ma tylko indeksy b-tree, pełnotekstowe i przestrzenne, na całych kolumnach, bez WHERE. | index_skipped |
| foreign keys | klucze obce, ładowane z FOREIGN_KEY_CHECKS=0Wiersze ładują się w dowolnej kolejności, a klucze sprawdzają potem nowe wiersze. | |
| foreign keys to tables the dump doesn't create | nie jest tworzoneKlucz nie może wskazywać tabeli, której nie ma. | foreign_key_skipped |
| partitioned tables | jedna tabela z wierszami wszystkich partycjiWiersze są te same; jeśli trzeba, podziel tabelę na partycje ponownie w MySQL. | partitions_dropped |
| schemas | jedna baza danych, nazwa każdej tabeli zaczyna się od nazwy jej schematuSchematy w MySQL to bazy danych, których skrypt ładowany do jednej bazy nie może utworzyć; tabele z public zachowują nazwy. | schemas_merged |
| views, functions, procedures, triggers, rules, policies, extensions and types | wymienione w raporcieIch kod jest napisany w języku PostgreSQL, więc trafiają na listę do ręcznego odtworzenia. | not_converted_objects |
| dumps without CREATE TABLE (--data-only) | typy odczytane z wartościZrzut samych danych zawiera tylko wiersze, więc typy pochodzą z wartości. | no_schema |
| expressions in INSERT values | NULLKonwerter, który nie uruchamia bazy danych, nie może ich obliczyć. | expression_value |
| types IntoSQL doesn't know | longtextTekst mieści każdą wartość; zmień typ po załadowaniu. | unknown_type |
| text that isn't valid in its encoding | błędne bajty jako znak zastępczyTekst musi być poprawnym utf8mb4. | invalid_utf8_replaced |
| text decoded twice (ñ) | skopiowane bez zmianZrzut zawiera dokładnie te znaki, więc są kopiowane; raport je wskazuje. | mojibake_suspected |
Załaduj skrypt do MySQL
Skrypt tworzy tabele, kopiuje wiersze, a potem dodaje klucze, indeksy i klucze obce, więc ładuje się szybko i zatrzymuje przy pierwszym błędzie.
mysql --default-character-set=utf8mb4 mydb < postgresql.mysql.sqlKlucze obce są tworzone tak, jak deklaruje je zrzut, z FOREIGN_KEY_CHECKS=0 podczas ładowania wierszy, więc wiersz wskazujący na brakujący wiersz nie zatrzymuje ładowania.
Przy dużym zrzucie uruchom klienta na tej samej maszynie co serwer i zwiększ max_allowed_packet, jeśli pojedynczy wiersz jest bardzo duży.
IntoSQL Pro ładuje plik prosto do MySQL z aplikacji na komputer lub wiersza poleceń, bez pisania skryptu.
Jak zrobić zrzut PostgreSQL dla najlepszego wyniku
Konwerter odczytuje to, co zawiera zrzut. Te opcje zachowują w nim więcej twoich danych:
- --format=plain, domyślny w pg_dump, zapisuje SQL. Archiwum custom lub directory (-Fc, -Fd) zamienisz na SQL poleceniem pg_restore -f dump.sql, bez serwera bazy danych.
- --no-owner --no-privileges pomijają role i uprawnienia, które konwerter i tak pomija, więc zrzut jest mniejszy.
- pg_dumpall zapisuje każdą bazę danych w jednym pliku; nazwy tabel każdej z nich zaczynają się od jej nazwy, więc nic się nie powtarza.
Co nie jest konwertowane
Widoki, widoki zmaterializowane, funkcje, procedury, wyzwalacze, reguły, polityki bezpieczeństwa wierszy, rozszerzenia i typy są pisane we własnym języku PostgreSQL. Raport wymienia je z nazwy i nigdy nie pomija ich po cichu, więc możesz je przepisać dla MySQL.
Pytania o konwersję PostgreSQL do MySQL
Nie ma tu odpowiedzi? Napisz do nas przez stronę kontaktu, a odpowie człowiek. Strona kontaktu
Czy mój zrzut jest wysyłany?
Nie. Konwerter działa w przeglądarce i odczytuje zrzut z dysku po kawałku, więc nigdy nie opuszcza on twojego komputera. Aplikacja na komputer i wiersz poleceń też konwertują na twoim komputerze.
Jak duży może być zrzut?
Konwerter nigdy nie trzyma całego zrzutu w pamięci: czyta plik dwa razy, fragmentami, i zapisuje skrypt na bieżąco. Zrzuty wielogigabajtowe konwertują się w przeglądarce, w aplikacji na komputer i w wierszu poleceń.
Czy odczytuje archiwa pg_dump -Fc?
Nie bezpośrednio: archiwum custom to format binarny. pg_restore -f dump.sql dump.backup zamienia je na zwykły SQL, który czyta konwerter, bez łączenia z serwerem. Konwerter informuje o tym, gdy dostanie archiwum.
Z jakich wersji PostgreSQL może pochodzić zrzut?
Zrzuty zapisane przez pg_dump i pg_dumpall z PostgreSQL od wersji 10, z wierszami COPY lub INSERT. Każdy testowy zrzut pochodzi z PostgreSQL 13 i 18 i jest porównywany ze źródłem komórka po komórce.
Czy wartości serial i identity są zachowywane?
Tak, dla jednej kolumny na tabelę: kolumna serial lub identity, która zaczyna klucz główny, staje się AUTO_INCREMENT i idzie dalej po najwyższym id. MySQL liczy jedną kolumnę na tabelę, więc każda inna zachowuje wartości bez licznika, a raport o tym mówi.
Co dzieje się z tablicami, typami enum i innymi typami PostgreSQL?
Tablice stają się tablicami JSON, wartości logiczne tinyint(1), typy enum ENUM z tymi samymi etykietami, a money liczbą decimal. Zakresy, typy geometryczne, hstore i typy złożone zachowują tekst PostgreSQL, a raport podaje, których kolumn to dotyczy.
A funkcje, wyzwalacze i widoki?
Raport wymienia je z nazwy, ale nie są konwertowane, bo każda baza danych zapisuje je we własnym języku.
Na jakich wersjach MySQL ładuje się skrypt?
MySQL 5.7 i nowsze. Każdy testowy zrzut ładuje się na 5.7 i 9 i zatrzymuje przy pierwszym błędzie, jeśli coś pójdzie nie tak.