---
title: "MySQL dökümlerini PostgreSQL için dönüştürün"
description: "Bir MySQL veya MariaDB dökümünü, ilk denemede çalışan bir PostgreSQL betiğine dönüştürün; her değişiklik raporlanır. Tarayıcınızda: döküm asla yüklenmez."
canonical: https://intosql.com/tr/mysql-postgresql-donusturme
last_updated: 2026-10-15
---

# MySQL dökümlerini PostgreSQL için dönüştürün

mysqldump, mariadb-dump, mysqlpump, phpMyAdmin veya Adminer ile alınmış bir dökümü .sql veya .sql.gz olarak bırakın ve aynı tablolar, anahtarlar, indeksler ve verilerle bir PostgreSQL betiği indirin. PostgreSQL tarafından olduğu gibi tutulamayan her değer ve taşınmayan her nesne raporda listelenir.

## MySQL ile PostgreSQL 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.

| MySQL içinde | PostgreSQL içinde | Rapor satırı |
| --- | --- | --- |
| TINYINT(1), BOOL | her değer 0 veya 1 ise boolean, değilse smallint | `bool_kept_numeric` |
| UNSIGNED integers | negatif olmadığını denetleyen bir CHECK ile bir sonraki geniş tam sayı; BIGINT UNSIGNED her değer sığıyorsa bigint, değilse numeric(20,0) | `unsigned_widened` |
| ZEROFILL and display widths | kaldırılır | `zerofill_dropped` |
| FLOAT(M,D) | ölçek olmadan real veya double precision | `float_scale_dropped` |
| BIT(1), BIT(n) | boolean, bit(n) |  |
| zero, partial or impossible dates (0000-00-00, 2024-02-30) | NULL | `invalid_date_null` |
| NOT NULL columns with values that become NULL | NOT NULL kaldırılır | `not_null_relaxed` |
| DEFAULT '0000-00-00' | varsayılan değer yok | `zero_date_default` |
| TIME | her değer bir gün içindeyse time, değilse interval | `time_as_interval` |
| YEAR | aralığını denetleyen bir CHECK ile smallint |  |
| CHAR(n) | varchar(n) |  |
| DATETIME | timestamp |  |
| TIMESTAMP | dökümün belirttiği saat diliminde timestamptz, belirtmiyorsa UTC | `timestamp_zone_assumed` |
| ENUM | değerlerini denetleyen bir CHECK ile text |  |
| ENUM holding '' (MySQL's error value) | CHECK'in izin verdiği boş değer | `enum_invalid_value` |
| ENUM or SET holding values outside its list | CHECK yok | `enum_check_skipped` |
| SET | her öğenin listede olduğunu denetleyen bir CHECK ile text[] |  |
| JSON | jsonb; bir değer \u0000 içerdiğinde json | `json_not_jsonb` |
| NUL bytes in text | kaldırılır | `nul_removed` |
| text that isn't valid in its character set | hatalı baytlar yerine koyma karakteri olarak | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | olduğu gibi kopyalanır | `mojibake_suspected` |
| AUTO_INCREMENT | sayacı kopyalanan id'lerin ötesine ayarlanmış GENERATED BY DEFAULT AS IDENTITY |  |
| MyISAM AUTO_INCREMENT on the second column of a key | tablo için tek sayaç | `myisam_group_autoincrement` |
| ON UPDATE CURRENT_TIMESTAMP | bir BEFORE UPDATE tetikleyicisi | `on_update_trigger` |
| generated columns | STORED | `virtual_as_stored` |
| generated columns with functions PostgreSQL lacks | düz bir sütun | `generated_not_translated` |
| INVISIBLE columns | normal sütunlar | `invisible_column` |
| CHECK constraints | çevrilir, CREATE TABLE içinde satır içi |  |
| CHECK constraints with functions PostgreSQL lacks | oluşturulmaz | `check_skipped` |
| CHECK ... NOT ENFORCED | oluşturulmaz | `check_not_enforced` |
| defaults with functions PostgreSQL lacks | varsayılan değer yok | `default_not_translated` |
| keys and indexes on a prefix, c(20) | left(c, 20) üzerinde bir indeks | `prefix_unique` |
| FULLTEXT indexes | to_tsvector('simple', ...) üzerinde GIN | `fulltext_as_gin` |
| indexes on values over 2,000 bytes | hash | `index_on_wide_values` |
| SPATIAL indexes | PostGIS olmadan oluşturulmaz | `spatial_index_skipped` |
| functional indexes PostgreSQL can't write | oluşturulmaz | `index_skipped` |
| foreign keys | veriden sonra, NOT VALID, ardından yetim satırlar için uyarıyla doğrulanır |  |
| foreign keys to columns without a unique key | oluşturulmaz | `foreign_key_skipped` |
| table and column names | benzersiz kaldığında küçük harf | `identifier_renamed` |
| names over 63 bytes | bir hash ile kısaltılır | `name_shortened` |
| GEOMETRY, POINT, POLYGON... | bytea içinde WKB | `geometry_as_wkb` |
| INET4, INET6, UUID (MariaDB) | inet, uuid |  |
| BINARY, VARBINARY, BLOB | bytea |  |
| PARTITION BY | tek tablo | `partitions_dropped` |
| WITH SYSTEM VERSIONING (MariaDB) | mevcut satırları içeren bir tablo | `system_versioning_dropped` |
| MyISAM, MEMORY and other engines | normal bir tablo | `engine_dropped` |
| views, triggers, procedures, functions and events | raporda listelenir | `not_converted_objects` |
| dumps without CREATE TABLE | değerlerden okunan türler | `no_schema` |
| geometries in a dump without CREATE TABLE | bytea içinde WKB | `geometry_inferred` |
| _ci collations | tam karşılaştırma | `case_insensitive_collation` |
| SET NAMES utf8 from utf8mb4 tables | dönüştürülür, uyarıyla | `dump_lost_four_byte_chars` |
| dumps without SET NAMES whose text isn't UTF-8 | Latin-1 (Windows-1252) olarak okunur | `charset_guessed` |
| sjis, cp932, gbk, big5 dumps | uyarıyla UTF-8 olarak okunur | `unsupported_charset` |
| UNHEX('..'), CONVERT(b'..', UNSIGNED), CONVERT(".." USING x), ST_GeomFromText('..') in rows | hesaplanır |  |
| other expressions in rows | NULL | `expression_value` |
| DEFAULT in VALUES | sütunun varsayılan değeri | `default_keyword_filled` |
| DEFAULT in VALUES without a literal default | NULL | `default_keyword_null` |
| REPLACE and INSERT IGNORE | düz satırlar | `replace_as_insert` |
| types IntoSQL doesn't know | text | `unknown_type` |
| values that don't fit their column | NULL | `invalid_value_null` |
| unreadable geometries | NULL | `bad_geometry` |
| CREATE SEQUENCE (MariaDB) | mevcut değeriyle CREATE SEQUENCE |  |

## Betiği PostgreSQL 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.

```shell
psql -v ON_ERROR_STOP=1 -d mydb -f mysql.postgresql.sql
```

Yabancı anahtarlar NOT VALID olarak eklenir ve ardından doğrulanır. Bir satır var olmayan bir satıra işaret ediyorsa betik, yarı yolda başarısız olmak yerine hangi kısıtın sorunlu olduğunu söyler.

Büyük bir döküm için önce veritabanını oluşturun ve betiği sunucuyla aynı makinede psql ile çalıştırın.

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

- --default-character-set=utf8mb4 emoji ve diğer 4 baytlık karakterleri korur; utf8 dökümü bunları dönüştürücü görmeden önce kaybeder.
- --hex-blob ikili sütunları onaltılık olarak yazar; bu biçim sistemler arasında kopyalamada bozulmaz.
- --routines --triggers --events bu nesneleri döküme ekler; böylece rapor onları listeleyebilir.

## Neler dönüştürülmez

Görünümler, tetikleyiciler, saklı yordamlar, fonksiyonlar ve olaylar her veritabanının kendi dilinde yazılır. Raporda adlarıyla listelenirler, asla sessizce atlanmazlar; böylece onları PostgreSQL için yeniden yazabilirsiniz.

## pgloader ile karşılaştırmalı ölçüm

Aynı dökümler, Ekim 2026'da tek bir makinede (SATA SSD'li 10 çekirdekli bir i9-10900K) IntoSQL ve pgloader 3.6.7 ile dönüştürüldü ve yüklendi.

- 2, -1 ve -5 içeren bir TINYINT(1) sütunu: pgloader her biri için uyarı vermeden true yükler. IntoSQL sayıları korur ve rapor nedenini söyler.
- Varsayılan değeri 'it's' olan bir sütun, adında ters tırnak geçen bir tablo, boş değer içeren bir ENUM ve 24 saati aşan bir TIME içeren bir döküm: pgloader durur. IntoSQL dökümü dönüştürür ve yükler.
- pgloader'ın yüklediği veride birincil, benzersiz ve yabancı anahtarlar ile kimlik sütunları kaybolmuştur. IntoSQL hepsini korur.
- 30 milyon satırlık 5.3 GB'lık bir döküm: pgloader önce dökümün çalışan bir MySQL'e geri yüklenmesini ister, bu 18 dakika sürer, ardından varsayılan ayarlarıyla belleği tükenir. IntoSQL dökümü 10 saniyede dönüştürür, psql de betiği yaklaşık 3 dakikada yükler.
- MySQL 5.5 ile 9 ve MariaDB 10.3 ile 12 arasından 476 döküm, PostgreSQL 13 ve 18'e yüklendi: hiç yükleme hatası yok ve hiçbir değer raporda bir satır olmadan değişmedi.

## MySQL - PostgreSQL dönüştürme hakkında sorular

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

### MariaDB dökümlerini okuyor mu?

Evet. mariadb-dump ile alınan dökümler ve MariaDB 10.3 ile 12 arası sürümlerin dökümleri, MariaDB'nin INET6, INET4 ve UUID sütunları dahil, aynı şekilde dönüştürülür.

### 0000-00-00 tarihlerine ne olur?

PostgreSQL içinde sıfır tarih yoktur; bu yüzden bunlar NULL olur ve sütun NULL kabul eder. Rapor her sütunda kaç tane olduğunu söyler.

### AUTO_INCREMENT değerleri korunuyor mu?

Evet. Her AUTO_INCREMENT sütunu bir kimlik sütunu olur, her satır kendi id'sini korur ve sonraki id en yüksek id'den sonra devam eder; tablonun AUTO_INCREMENT değeri daha yüksekse ondan sonra.

### TINYINT(1) boolean olur mu?

Yalnızca sütundaki her değer 0 veya 1 ise. 2 veya -1 gibi başka sayılar içeriyorsa sayı olarak kalır ve rapor nedenini söyler; böylece hiçbir değer yanlışlıkla true olmaz.

### Saklı yordamlar ve tetikleyiciler ne olur?

Raporda adlarıyla listelenirler ve dönüştürülmezler, çünkü her veritabanı onları kendi dilinde yazar. ON UPDATE CURRENT_TIMESTAMP istisnadır: bir PostgreSQL tetikleyicisine dönüşür.

### Betik hangi PostgreSQL sürümlerinde yüklenir?

PostgreSQL 13 ile 18 arası. Aynı betik her birinde yüklenir ve bir sorun çıkarsa ilk hatada durur.

## PostgreSQL için diğer dönüştürmeler

- [Excel dosyalarını PostgreSQL için dönüştürün](https://intosql.com/tr/excel-postgresql-donusturme)
- [CSV dosyalarını PostgreSQL için dönüştürün](https://intosql.com/tr/csv-postgresql-donusturme)
- [JSON dosyalarını PostgreSQL için dönüştürün](https://intosql.com/tr/json-postgresql-donusturme)
