İçeriğe geç
IntoSQL ana sayfası

PostgreSQL dökümünü daha eski veya daha yeni bir PostgreSQL sürümüne taşıyın

pg_dump veya pg_dumpall ile alınmış düz bir dökümü .sql ya da .sql.gz olarak bırakın ve dökümü hangi sürüm yazmış olursa olsun PostgreSQL 13 ile 18 arasında yüklenen tek bir betik indirin. Identity'ler, enum'lar, diziler ve jsonb olduğu gibi kalır, bir eklentinin getirdiği türler text olur ve her değişiklik raporda listelenir.

Dosyanız
sqlshop_2024_postgres.sqlÖrnek dosya, 6,2 kB
Veritabanınız

18 satır dönüştürüldü, düzeltme yok, reddedilen yok

Göster

shop_2024_postgres.sql içindeki tablolarPostgreSQL 18.6 dökümü · pg_dump ile yazıldı · utf8mb4

  • customers8 satır
    8 sütun
    idinteger not null
    nametext not null
    emailtext not null
    countryvarchar(2) not null
    is_activeboolean not null
    tagstext[] not null
    signed_update
    created_attimestamptz(6) not null
  • orders10 satır
    10 sütun
    idinteger not null
    customer_idinteger not null
    statusorder_status not null
    totalnumeric(10,2) not null
    itemssmallint not null
    ordered_attimestamp(6) not null
    shipped_attimestamp(6)
    notetext
    detailsjsonb
    deliveryinterval

Dönüştürülmedi

  • Görünüm paid_orders

Her veritabanı bunları kendi dilinde yazar. Bunları PostgreSQL için yeniden yazın.

-- Written by IntoSQL from a PostgreSQL dump. Load it with: psql -v ON_ERROR_STOP=1 -f <file>
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET synchronous_commit = off;
SET maintenance_work_mem = '512MB';

CREATE TYPE order_status AS ENUM ('pending', 'paid', 'shipped', 'cancelled');
CREATE TABLE customers (
    id integer GENERATED BY DEFAULT AS IDENTITY NOT NULL,
    name text NOT NULL,
    email text NOT NULL,
    country varchar(2) DEFAULT 'US' NOT NULL,
    is_active boolean DEFAULT true NOT NULL,
    tags text[] DEFAULT '{}' NOT NULL,
    signed_up date,
    created_at timestamptz(6) DEFAULT CURRENT_TIMESTAMP NOT NULL
);

CREATE TABLE orders (
    id integer GENERATED BY DEFAULT AS IDENTITY NOT NULL,
    customer_id integer NOT NULL,
    status order_status DEFAULT 'pending' NOT NULL,
    total numeric(10,2) NOT NULL,
    items smallint DEFAULT 1 NOT NULL,
    ordered_at timestamp(6) NOT NULL,
    shipped_at timestamp(6),
    note text,
    details jsonb,
    delivery interval,
    CONSTRAINT orders_total_check CHECK (total >= (0))
);

COPY customers (id, name, email, country, is_active, tags, signed_up, created_at) FROM stdin;
1	Ana Martínez	ana@example.com	MX	t	{vip}	2023-01-15	2023-01-15 10:24:00+00
2	Zoë Müller	zoe@example.de	DE	t	{}	2023-02-03	2023-02-03 08:11:42+00
3	José Peña	jose@example.es	ES	f	{wholesale,"late payer"}	2023-03-21	2023-03-21 19:05:17+00
4	李雷	lilei@example.cn	CN	t	{}	2023-05-09	2023-05-09 02:40:00+00
5	Noah O'Brien	noah@example.ie	IE	t	{}	\N	2023-06-30 14:00:00+00
6	Amélie Laurent	amelie@example.fr	FR	t	{vip}	2024-01-02	2024-01-02 09:30:00+00
7	Ravi Patel	ravi@example.in	IN	f	{}	2024-02-29	2024-02-29 23:59:59+00
8	Sofia Rossi 🌻	sofia@example.it	IT	t	{}	2024-04-12	2024-04-12 12:12:12+00
\.

COPY orders (id, customer_id, status, total, items, ordered_at, shipped_at, note, details, delivery) FROM stdin;
1	1	shipped	129.90	3	2024-03-01 10:00:00	2024-03-02 16:30:00	\N	{"gift": false}	1 day 06:30:00
2	2	paid	54.00	1	2024-03-02 11:15:00	\N	Gift wrap 🎁	{"gift": true, "wrap": "red"}	\N
3	1	cancelled	12.50	1	2024-03-03 09:45:00	\N	Customer changed their mind	\N	\N
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	\N	Leave at the door; ring twice	\N	\N
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	\N	\N	\N	\N
8	2	shipped	19.99	1	2024-03-12 08:00:00	infinity	Shipped date set to infinity by an old import	\N	\N
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	\N	C:\\Users\\ravi\\invoice.pdf	\N	\N
\.


-- Keys, indexes and constraints, after the rows so each builds once.
CREATE UNIQUE INDEX customers_email_key ON customers (email);
CREATE UNIQUE INDEX customers_pkey ON customers (id);
CREATE UNIQUE INDEX orders_pkey ON orders (id);
CREATE INDEX idx_orders_customer ON orders (customer_id);
CREATE INDEX idx_orders_status_date ON orders (status, ordered_at);
ALTER TABLE customers ADD CONSTRAINT customers_email_key UNIQUE USING INDEX customers_email_key;
ALTER TABLE customers ADD CONSTRAINT customers_pkey PRIMARY KEY USING INDEX customers_pkey;
ALTER TABLE orders ADD CONSTRAINT orders_pkey PRIMARY KEY USING INDEX orders_pkey;
ALTER TABLE orders ADD CONSTRAINT orders_customer_id_fkey FOREIGN KEY (customer_id) REFERENCES customers (id) NOT VALID;
DO $f$ BEGIN
    ALTER TABLE orders VALIDATE CONSTRAINT orders_customer_id_fkey;
EXCEPTION WHEN foreign_key_violation THEN
    RAISE WARNING 'foreign key % has rows without a parent: it stays NOT VALID, and new rows are checked', 'orders_customer_id_fkey';
END $f$;
SELECT setval(pg_get_serial_sequence('customers', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM customers)::numeric, 0) + 1, 1001), 2147483647)::bigint, false);
COMMENT ON TABLE customers IS 'People who bought at least once';
SELECT setval(pg_get_serial_sequence('orders', 'id'), LEAST(GREATEST(COALESCE((SELECT max(id) FROM orders)::numeric, 0) + 1, 5001), 2147483647)::bigint, false);

Düzeltmeler

Düzeltilecek bir şey yoktu.

Kontrol edilmeli

  • 1 görünüm, tetikleyici, rutin veya olay dönüştürülmedi; rapor her birini listeliyor. Bunları PostgreSQL'de elle yeniden oluşturun.
  • orders üzerindeki idx_orders_details indeksi PostgreSQL için yazılamayan bir ifade kullanıyor (a gin index); bu yüzden oluşturulmadı. Sorgular gerektiriyorsa indeksi elle oluşturun.

Dosyan bu bilgisayarda dönüştürülür ve asla yüklenmez.

Diğer örnekler:

Dosya ile betik 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.

  • varchar(n), char(n), text

    aynı türler

    Aynı türler, aynı uzunluklarla.

  • numeric(p,s), numeric without a precision, NaN and Infinity

    aynı türler ve değerler

    Aynı tür: her basamak dökümün yazdığı gibi kopyalanır.

  • money

    numeric(19,2)

    Paranın yazılışı sunucunun lc_monetary ayarına bağlıdır, bu yüzden tutar para birimi simgesi olmadan sayı olarak korunur ve hedefin yerel ayarı ne olursa olsun yüklenir.

    Rapor satırı: type_replaced

  • enum types

    tablolardan önce oluşturulan aynı enum türleri

    Etiketler sıralarını korur.

  • enum columns holding values outside their labels

    CHECK olmadan text

    Tür bu değerleri reddederdi, bu yüzden sütun text olur ve hepsini korur.

    Rapor satırı: enum_check_skipped

  • composite and range types the dump defines, extension types (citext, hstore, ltree, PostGIS) and multiranges

    PostgreSQL'in metniyle text

    Betik ne eklenti ne de bileşik tür oluşturur, bu yüzden her değer PostgreSQL'in yazdığı metni korur; yüklemeden sonra türü oluşturup sütunu değiştirin.

    Rapor satırı: type_replaced

  • citext

    tam karşılaştırılan text

    Betik citext eklentisini oluşturmaz, bu yüzden bu sütunlar metni tam karşılaştırır; yüklemeden sonra eklentiyi oluşturup sütunları geri değiştirin.

    Rapor satırı: case_insensitive_collation

  • json, jsonb

    aynı türler

    json metni yazıldığı gibi korur; jsonb değerleri sunucunun normalleştirdiği gibi korur.

  • timestamp with time zone

    timestamptz, aynı anlar

    Her değer dökümün yazdığı farkı korur, böylece an her saat diliminde aynıdır.

  • time, time with time zone

    aynı türler

    Aynı türler, 24:00:00 dahil.

  • infinity, -infinity and BC dates

    korunur

    PostgreSQL bunları olduğu gibi tutar.

  • NaN and Infinity in numeric, real and double precision

    korunur

    PostgreSQL bunları olduğu gibi tutar.

  • generated columns

    aynı üretilen sütunlar

    Aynı formül, hedef tarafından hesaplanır.

  • generated columns with functions IntoSQL doesn't write

    değerleriyle düz bir sütun

    IntoSQL'in yazamadığı bir formül, dökümün değerleriyle düz bir sütun ve bir rapor satırı bırakır.

    Rapor satırı: generated_not_translated

  • defaults with functions IntoSQL doesn't write

    varsayılan değer yok

    IntoSQL'in yazamadığı bir varsayılan değer dışarıda bırakılır ve raporlanır.

    Rapor satırı: default_not_translated

  • CHECK constraints with functions IntoSQL doesn't write

    oluşturulmaz

    IntoSQL'in yazamadığı bir CHECK kısıtı dışarıda bırakılır ve raporlanır.

    Rapor satırı: check_skipped

  • CHECK ... NOT VALID

    satırlardan sonra NOT VALID olarak eklenir

    Daha önce var olan satırlar hiç denetlenmedi, bu yüzden CHECK onlardan sonra, yine geçerlenmemiş olarak eklenir.

  • gin, gist, brin and hash indexes, partial and expression indexes

    oluşturulmaz

    IntoSQL sütunlar üzerinde b-tree indeksleri yazar; diğerlerini yüklemeden sonra yeniden oluşturun.

    Rapor satırı: index_skipped

  • 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

  • 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

  • partitioned tables

    her bölümün satırlarını içeren tek tablo

    Satırlar aynıdır; gerekiyorsa tabloyu yeniden bölümleyin.

    Rapor satırı: partitions_dropped

  • views, functions, procedures, triggers, rules, policies, extensions and types other than enums

    raporda listelenir

    IntoSQL tabloları ve satırlarını dönüştürür; geri kalanı yeniden oluşturmanız için listelenir.

    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

    text

    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

    PostgreSQL metni geçerli UTF-8 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

DosyadaBetikteRapor satırı
varchar(n), char(n), textaynı türlerAynı türler, aynı uzunluklarla.
numeric(p,s), numeric without a precision, NaN and Infinityaynı türler ve değerlerAynı tür: her basamak dökümün yazdığı gibi kopyalanır.
moneynumeric(19,2)Paranın yazılışı sunucunun lc_monetary ayarına bağlıdır, bu yüzden tutar para birimi simgesi olmadan sayı olarak korunur ve hedefin yerel ayarı ne olursa olsun yüklenir.type_replaced
enum typestablolardan önce oluşturulan aynı enum türleriEtiketler sıralarını korur.
enum columns holding values outside their labelsCHECK olmadan textTür bu değerleri reddederdi, bu yüzden sütun text olur ve hepsini korur.enum_check_skipped
composite and range types the dump defines, extension types (citext, hstore, ltree, PostGIS) and multirangesPostgreSQL'in metniyle textBetik ne eklenti ne de bileşik tür oluşturur, bu yüzden her değer PostgreSQL'in yazdığı metni korur; yüklemeden sonra türü oluşturup sütunu değiştirin.type_replaced
citexttam karşılaştırılan textBetik citext eklentisini oluşturmaz, bu yüzden bu sütunlar metni tam karşılaştırır; yüklemeden sonra eklentiyi oluşturup sütunları geri değiştirin.case_insensitive_collation
json, jsonbaynı türlerjson metni yazıldığı gibi korur; jsonb değerleri sunucunun normalleştirdiği gibi korur.
timestamp with time zonetimestamptz, aynı anlarHer değer dökümün yazdığı farkı korur, böylece an her saat diliminde aynıdır.
time, time with time zoneaynı türlerAynı türler, 24:00:00 dahil.
infinity, -infinity and BC dateskorunurPostgreSQL bunları olduğu gibi tutar.
NaN and Infinity in numeric, real and double precisionkorunurPostgreSQL bunları olduğu gibi tutar.
generated columnsaynı üretilen sütunlarAynı formül, hedef tarafından hesaplanır.
generated columns with functions IntoSQL doesn't writedeğerleriyle düz bir sütunIntoSQL'in yazamadığı bir formül, dökümün değerleriyle düz bir sütun ve bir rapor satırı bırakır.generated_not_translated
defaults with functions IntoSQL doesn't writevarsayılan değer yokIntoSQL'in yazamadığı bir varsayılan değer dışarıda bırakılır ve raporlanır.default_not_translated
CHECK constraints with functions IntoSQL doesn't writeoluşturulmazIntoSQL'in yazamadığı bir CHECK kısıtı dışarıda bırakılır ve raporlanır.check_skipped
CHECK ... NOT VALIDsatırlardan sonra NOT VALID olarak eklenirDaha önce var olan satırlar hiç denetlenmedi, bu yüzden CHECK onlardan sonra, yine geçerlenmemiş olarak eklenir.
gin, gist, brin and hash indexes, partial and expression indexesoluşturulmazIntoSQL sütunlar üzerinde b-tree indeksleri yazar; diğerlerini yüklemeden sonra yeniden oluşturun.index_skipped
foreign keys to tables the dump doesn't createoluşturulmazBir anahtar, var olmayan bir tabloya başvuramaz.foreign_key_skipped
NOT NULL columns with values that become NULLNOT 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
partitioned tablesher bölümün satırlarını içeren tek tabloSatırlar aynıdır; gerekiyorsa tabloyu yeniden bölümleyin.partitions_dropped
views, functions, procedures, triggers, rules, policies, extensions and types other than enumsraporda listelenirIntoSQL tabloları ve satırlarını dönüştürür; geri kalanı yeniden oluşturmanız için listelenir.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 valuesNULLVeritabanı çalıştırmayan bir dönüştürücü bunları hesaplayamaz.expression_value
types IntoSQL doesn't knowtextMetin her değeri tutar; yüklemeden sonra türü değiştirin.unknown_type
text that isn't valid in its encodinghatalı baytlar yerine koyma karakteri olarakPostgreSQL metni geçerli UTF-8 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 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.

psql -v ON_ERROR_STOP=1 -d mydb -f postgresql.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.

IntoSQL Pro, dosyayı masaüstü uygulamasından veya komut satırından doğrudan PostgreSQL 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

PostgreSQL kendi dilinde yazılmış görünümler, tetikleyiciler, yordamlar, fonksiyonlar ve diğer nesneler raporda adlarıyla listelenir, asla sessizce atlanmaz; böylece yeniden oluşturmadan önce her birini yüklediğiniz PostgreSQL sürümüyle karşılaştırabilirsiniz.

PostgreSQL sürümleri arasında taşıma 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. serial ve identity sütunları kimlik sütunu olarak kalır, her satır kendi id'sini korur ve her sayaç dökümdeki sequence'ın ulaştığı değerden devam eder.

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

Olduğu gibi kalırlar: diziler, range'ler, json ve jsonb, bit dizileri, money hariç. Enum türleri etiketleriyle yeniden oluşturulur. Bir eklentinin getirdiği türler (citext, hstore, PostGIS) ve bileşik türler text olur 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; böylece tablolar yüklendikten sonra onları yeniden oluşturabilirsiniz. NOT VALID CHECK kısıtları satırlardan sonra, yine geçerlenmemiş olarak eklenir.

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

Dökümü hangi sürüm yazmış olursa olsun PostgreSQL 13 ile 18 arası. Aynı betik her birinde yüklenir ve bir sorun çıkarsa ilk hatada durur.