---
title: "PostgreSQL - Oracle taşıma, tarayıcınızda"
description: "Bir PostgreSQL veritabanını Oracle hedefine taşıyın: pg_dump dosyasını aynı tablolar, anahtarlar ve verilerle bir betiğe dönüştürün, her değişikliğin raporuyla."
canonical: https://intosql.com/tr/postgresql-oracle-donusturme
last_updated: 2026-10-15
---

# PostgreSQL - Oracle taşıma, tarayıcınızda

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 Oracle betiği indirin. Oracle'in olduğu gibi tutamadığı her değer ve taşımadığı her nesne raporda listelenir.

[PostgreSQL - Oracle taşıma kılavuzu](https://intosql.com/docs/migrations/postgresql-to-oracle)

[PostgreSQL - Oracle veri türleri](https://intosql.com/docs/types/postgresql-to-oracle)

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

| PostgreSQL içinde | Oracle içinde | Rapor satırı |
| --- | --- | --- |
| boolean | 0 ve 1'i denetleyen bir CHECK ile NUMBER(1) |  |
| varchar(n), char(n) | karakter sayan VARCHAR2(n CHAR) |  |
| text | her değer 4000 bayta sığıyorsa (anahtarda 750 karakter) VARCHAR2(4000 CHAR), değilse CLOB | `text_as_lob` |
| empty strings and empty bytea values | NULL | `empty_string_null` |
| citext | tam karşılaştırma | `case_insensitive_collation` |
| numeric(p,s) past 38 digits; numeric without a precision | değerleri 38 basamağa sığıyorsa NUMBER, değilse VARCHAR2 | `decimal_as_text` |
| money | NUMBER(19,2) | `type_replaced` |
| interval | PostgreSQL'in metniyle VARCHAR2(100 CHAR) | `type_replaced` |
| arrays (integer[], text[]...) | JSON dizisiyle CLOB | `type_replaced` |
| ranges, geometric types, tsvector, xml, hstore, PostGIS, composite and extension types | PostgreSQL'in metniyle VARCHAR2 veya CLOB | `type_replaced` |
| json, jsonb | CLOB |  |
| timestamp | TIMESTAMP |  |
| timestamp with time zone | UTC'de TIMESTAMP WITH TIME ZONE |  |
| time | gece yarısından itibaren INTERVAL DAY TO SECOND |  |
| infinity, -infinity, BC dates and years past 9999 | NULL | `date_out_of_range` |
| NaN and Infinity in numeric | NULL | `invalid_value_null` |
| NOT NULL columns with values that become NULL | NOT NULL kaldırılır | `not_null_relaxed` |
| enum types | etiketlerini denetleyen bir CHECK ile VARCHAR2 |  |
| enum columns holding values outside their labels | CHECK olmadan VARCHAR2 | `enum_check_skipped` |
| uuid, inet, cidr, macaddr | VARCHAR2 |  |
| bytea | BLOB |  |
| bit(n), bit varying | 63 bite kadar bitlerin değeriyle NUMBER; ötesi metin basamakları |  |
| oid, xid, cid | negatif olmadığını denetleyen bir CHECK ile NUMBER(10) |  |
| serial, identity | en yüksek id'den sonra devam eden GENERATED BY DEFAULT ON NULL AS IDENTITY |  |
| a second serial or identity column in a table | düz bir tam sayı | `counter_dropped` |
| sequences not owned by a column | ulaştığı değerden CREATE SEQUENCE |  |
| generated columns | sanal sütunlar | `stored_as_virtual` |
| generated columns with functions Oracle lacks | değerleriyle düz bir sütun | `generated_not_translated` |
| defaults with functions Oracle lacks, and defaults from a sequence | varsayılan değer yok | `default_not_translated` |
| CHECK constraints | çevrilir, CREATE TABLE içinde satır içi |  |
| CHECK constraints with functions Oracle lacks | oluşturulmaz | `check_skipped` |
| CHECK ... NOT VALID | oluşturulmaz | `check_not_valid` |
| gin, gist, brin and hash indexes, partial and expression indexes, and indexes on CLOB columns | oluşturulmaz | `index_skipped` |
| foreign keys | veriden sonra ENABLE NOVALIDATE, ardından yetim satırlar için uyarıyla doğrulanır |  |
| ON UPDATE CASCADE, SET NULL or SET DEFAULT; ON DELETE SET DEFAULT | kaldırılır | `foreign_key_action_unsupported` |
| foreign keys to tables the dump doesn't create | oluşturulmaz | `foreign_key_skipped` |
| names over 128 bytes | kısaltılır | `name_shortened` |
| partitioned tables | her bölümün satırlarını içeren tek tablo | `partitions_dropped` |
| schemas | tek şema, tabloların adı önce şemalarının adıyla başlar | `schemas_merged` |
| views, functions, procedures, triggers, rules, policies, extensions and types | raporda listelenir | `not_converted_objects` |
| dumps without CREATE TABLE (--data-only) | değerlerden okunan türler | `no_schema` |
| expressions in INSERT values | NULL | `expression_value` |
| types IntoSQL doesn't know | CLOB | `unknown_type` |
| text that isn't valid in its encoding | hatalı baytlar yerine koyma karakteri olarak | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | olduğu gibi kopyalanır | `mojibake_suspected` |

## Betiği Oracle 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
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @postgresql.oracle.sql
```

Yabancı anahtarlar ENABLE NOVALIDATE ile eklenir, böylece yeni satırlar hemen denetlenir, ardından doğrulanır. Eski bir satır var olmayan bir satıra işaret ediyorsa betik, yarı yolda başarısız olmak yerine hangi kısıt olduğunu söyler ve onu doğrulanmamış bırakır.

Büyük bir döküm için SQL*Plus'ı veritabanıyla aynı makinede çalıştırın. Betik her 100 satırda bir commit yapar. Betiği çalıştıran kullanıcının CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER ve CREATE PROCEDURE yetkilerine ve tablo alanında kotaya ihtiyacı vardır.

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

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

### 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. Her tablonun serial veya identity 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. Bir sütuna ait olmayan sequence'lar, ulaştıkları değerden Oracle sequence'ı olur.

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

Diziler JSON dizisi, boolean'lar NUMBER(1), saat dilimli timestamp'ler TIMESTAMP WITH TIME ZONE, metin ise değerleri sığıyorsa VARCHAR2, değilse CLOB olur. Boş dizeler, Oracle onları öyle sakladığı için NULL olur ve rapor bunları sayar.

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

Oracle 19c ve sonrası. Her test dökümü 21c ve 23ai üzerinde yüklenir ve bir sorun çıkarsa ilk hatada durur.

## Kaynak: PostgreSQL

- [PostgreSQL - PostgreSQL](https://intosql.com/tr/postgresql-postgresql-donusturme)
- [PostgreSQL - MySQL](https://intosql.com/tr/postgresql-mysql-donusturme)
- [PostgreSQL - MariaDB](https://intosql.com/tr/postgresql-mariadb-donusturme)
- [PostgreSQL - SQLite](https://intosql.com/tr/postgresql-sqlite-donusturme)
- [PostgreSQL - SQL Server](https://intosql.com/tr/postgresql-sql-server-donusturme)

## Hedef: Oracle

- [MySQL - Oracle](https://intosql.com/tr/mysql-oracle-donusturme)
- [MariaDB - Oracle](https://intosql.com/tr/mariadb-oracle-donusturme)
- [SQL Server - Oracle](https://intosql.com/tr/sql-server-oracle-donusturme)
- [SQLite - Oracle](https://intosql.com/tr/sqlite-oracle-donusturme)
- [Oracle - Oracle](https://intosql.com/tr/oracle-oracle-donusturme)

## Kılavuz ve tüm ikililer

- [Oracle - PostgreSQL](https://intosql.com/tr/oracle-postgresql-donusturme)
- [PostgreSQL - Oracle taşıma kılavuzu](https://intosql.com/docs/migrations/postgresql-to-oracle)
- [PostgreSQL - Oracle veri türleri](https://intosql.com/docs/types/postgresql-to-oracle)
- [Tüm veritabanı ikilileri](https://intosql.com/tr/veritabani-tasima)
