Przejdź do treści
Strona główna IntoSQL

Konwertuj PostgreSQL do MariaDB

Upuść zwykły zrzut z pg_dump lub pg_dumpall jako .sql lub .sql.gz i pobierz skrypt MariaDB z tymi samymi tabelami, kluczami, indeksami i danymi. Każda wartość, której MariaDB nie może przechować bez zmian, i każdy obiekt, którego nie przenosi, są wymienione w raporcie.

Twój plik
sqlshop_2024_postgres.sqlPlik przykładowy, 6,2 kB
Twoja baza danych

18 wierszy przekonwertowanych, 3 poprawki, brak odrzuconych

Pokaż

Tabele w pliku shop_2024_postgres.sqlZrzut PostgreSQL 18.6 · zapisany przez pg_dump · utf8mb4

  • customers8 wierszy2
    8 kolumn
    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 wierszy1
    10 kolumn
    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)

Nieprzekonwertowane

  • Widok paid_orders

Każda baza danych zapisuje je we własnym języku. Przepisz je dla MariaDB.

-- Written by IntoSQL from a PostgreSQL dump. Load it with: mariadb --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

  1. "created_at" tabeli customers zawiera momenty ze strefą czasową; MariaDB nie ma typu, który ją zachowuje, więc są zapisywane w UTC jako datetime(6).
  2. "tags" w tabeli customers to text[], czego MariaDB nie ma, więc ma typ json z tymi samymi wartościami.
  3. "delivery" w tabeli orders to interval, czego MariaDB 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 MariaDB.
  • Wartości domyślnej "tags" w tabeli customers nie da się zapisać dla MariaDB (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 MariaDB (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 MariaDB, np. infinity, staje się NULL. MariaDB 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 MariaDB

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

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

    varchar

    decimal w MariaDB 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)

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

    MariaDB 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

    MariaDB 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 MariaDB 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 MariaDB mieści każdą godzinę dnia, łącznie z 24:00:00.

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

    NULL

    MariaDB 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 MariaDB 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 MariaDB zachowuje etykiety w ich kolejności.

  • uuid, inet, cidr

    uuid jako uuid, inet i cidr jako varchar(43)

    MariaDB ma typ uuid; adresy zachowują swój tekst, łącznie z maską.

  • 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

    MariaDB liczy jedną kolumnę na tabelę; każda inna zachowuje wartości bez licznika.

    Wpis w raporcie: counter_dropped

  • sequences not owned by a column

    CREATE SEQUENCE, od wartości, którą wyda jako następną

    Sekwencje w MariaDB działają tak samo.

  • generated columns

    kolumny generowane, STORED jak w źródle

    MariaDB oblicza je tak samo.

  • generated columns with functions MariaDB lacks

    zwykła kolumna

    Formuła, której nie da się zapisać dla MariaDB, zostawia zwykłą kolumnę i wpis w raporcie.

    Wpis w raporcie: generated_not_translated

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

    brak wartości domyślnej

    Wartość domyślna, której nie da się zapisać dla MariaDB, 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 MariaDB lacks

    nie jest tworzone

    Ograniczenie CHECK, którego nie da się zapisać dla MariaDB, 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

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

    Wpis w raporcie: partitions_dropped

  • schemas

    jedna baza danych, nazwa każdej tabeli zaczyna się od nazwy jej schematu

    Schematy w MariaDB 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 PostgreSQLW MariaDBWpis w raporcie
booleantinyint(1)BOOLEAN w MariaDB to TINYINT(1): true to 1, a false to 0.
varchar(n), char(n), textvarchar(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.
numeric(p,s) past 65 digits or 30 decimals, and numeric values past what decimal(65,30) holdsvarchardecimal w MariaDB 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
moneydecimal(19,2)MariaDB nie ma typu money. Kwota jest zapisywana jako liczba, bez symbolu waluty dodanego przez ustawienia regionalne serwera.type_replaced
intervalvarchar(100) z tekstem PostgreSQLTIME w MariaDB 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 jsonMariaDB 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 typeslongtext z tekstem PostgreSQLMariaDB nie ma odpowiedniego typu, więc każda wartość zachowuje tekst zapisany przez PostgreSQL.type_replaced
json, jsonbjsonTe same wartości JSON; kolejność kluczy i odstępy jsonb są takie, jak ustalił serwer.
timestampdatetime(p)timestamp bez strefy czasowej to wskazanie zegara, jak datetime.
timestamp with time zonedatetime(p) w UTCTIMESTAMP w MariaDB 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
timetime(p)TIME w MariaDB mieści każdą godzinę dnia, łącznie z 24:00:00.
infinity, -infinity, BC dates and years past 9999NULLMariaDB 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 precisionNULLLiczby w MariaDB 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 NULLNOT 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 typesenum(...) z tymi samymi etykietamiENUM w MariaDB zachowuje etykiety w ich kolejności.
uuid, inet, cidruuid jako uuid, inet i cidr jako varchar(43)MariaDB ma typ uuid; adresy zachowują swój tekst, łącznie z maską.
byteablob, 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 collationsdokł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, identityAUTO_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 tablezwykła liczba całkowitaMariaDB liczy jedną kolumnę na tabelę; każda inna zachowuje wartości bez licznika.counter_dropped
sequences not owned by a columnCREATE SEQUENCE, od wartości, którą wyda jako następnąSekwencje w MariaDB działają tak samo.
generated columnskolumny generowane, STORED jak w źródleMariaDB oblicza je tak samo.
generated columns with functions MariaDB lackszwykła kolumnaFormuła, której nie da się zapisać dla MariaDB, zostawia zwykłą kolumnę i wpis w raporcie.generated_not_translated
defaults with functions MariaDB lacks, and defaults from a sequencebrak wartości domyślnejWartość domyślna, której nie da się zapisać dla MariaDB, jest pomijana i zgłaszana w raporcie.default_not_translated
CHECK constraintsprzetłumaczone, wewnątrz CREATE TABLEMySQL 8.0.16 i MariaDB je stosują; MySQL 5.7 przechowuje je bez sprawdzania.
CHECK constraints with functions MariaDB lacksnie jest tworzoneOgraniczenie CHECK, którego nie da się zapisać dla MariaDB, jest pomijane i zgłaszane w raporcie.check_skipped
CHECK ... NOT VALIDnie 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 indexesnie jest tworzoneMariaDB ma tylko indeksy b-tree, pełnotekstowe i przestrzenne, na całych kolumnach, bez WHERE.index_skipped
foreign keysklucze 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 createnie jest tworzoneKlucz nie może wskazywać tabeli, której nie ma.foreign_key_skipped
partitioned tablesjedna tabela z wierszami wszystkich partycjiWiersze są te same; jeśli trzeba, podziel tabelę na partycje ponownie w MariaDB.partitions_dropped
schemasjedna baza danych, nazwa każdej tabeli zaczyna się od nazwy jej schematuSchematy w MariaDB 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 typeswymienione 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 valuesNULLKonwerter, który nie uruchamia bazy danych, nie może ich obliczyć.expression_value
types IntoSQL doesn't knowlongtextTekst mieści każdą wartość; zmień typ po załadowaniu.unknown_type
text that isn't valid in its encodingbłę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 MariaDB

Skrypt tworzy tabele, kopiuje wiersze, a potem dodaje klucze, indeksy i klucze obce, więc ładuje się szybko i zatrzymuje przy pierwszym błędzie.

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

Klucze obce są tworzone tak, jak deklaruje je zrzut, z FOREIGN_KEY_CHECKS=0 podczas ładowania wierszy, tak jak robi to mysqldump.

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

Pytania o konwersję PostgreSQL do MariaDB

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. Sekwencje niepowiązane z kolumną stają się sekwencjami MariaDB od osiągniętej wartości.

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, uuid UUID, 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 MariaDB ładuje się skrypt?

MariaDB 10.11 i nowsze. Każdy testowy zrzut ładuje się na 10.11 i 11.4 i zatrzymuje przy pierwszym błędzie, jeśli coś pójdzie nie tak.