EMZETT.
Giriş yap

pg_dump ve psql

Kısaca: PostgreSQL’in iki resmî komut satırı aracı — pg_dump bir veri tabanının verilerini/yapısını bir dosyaya dışa aktarır, psql SQL dosyalarını (bu tür dışa aktarımlar dahil) bir veri tabanına geri yükler.

Biraz daha ayrıntılı: Önemli: kurulu pg_dump sürümü sunucu sürümüyle aynı veya ondan yeni olmalıdır, aksi hâlde dışa aktarım başarısız olur. Yeni sürümler dışa aktarım dosyasının başına/sonuna \restrict/\unrestrict güvenlik komutları ekler — bunlar salt psql sözdizimidir, SQL değildir ve bu yüzden içeriği yalnızca SQL anlayan saf bir web SQL düzenleyicisine yapıştırırsan çalışmaz.

Ayrıntılı

pg_dump, sonucu daha sonra ne yapmak istediğine bağlı olarak farklı şekillerde dışa aktarabilir:

pg_dump --table=challenges --data-only "$SOURCE_DB_URL" > challenges.sql
pg_dump --format=custom "$SOURCE_DB_URL" > backup.dump
psql "$TARGET_DB_URL" < challenges.sql

--schema-only yalnızca tablo yapısını (CREATE TABLE, dizinler, kısıtlamalar) verisiz dışa aktarır, --data-only yalnızca verileri (hedef şema zaten mevcutsa yararlıdır; örneğin Drizzle onu bir migrasyonla zaten oluşturduysa — CREATE TABLE ile iki kez oluşturmak aksi hâlde başarısız olurdu). Neon gibi bulut veri tabanlarında sık bir tuzak: varsayılan olarak dışa aktarım rol/sahip bilgilerini (ALTER TABLE ... OWNER TO ...) de içerir; bu, farklı rol adları olan başka bir veri tabanına içe aktarırken başarısız olabilir — --no-owner ve --no-privileges bunu önler.

Etkileşimli konsol olarak psql

Salt “bir SQL dosyası yüklemenin” yanı sıra psql kendi meta komutlarına sahip eksiksiz bir etkileşimli konsoldur (\ ile başlarlar ve SQL DEĞİLDİR):

psql "$DATABASE_URL"
\dt              -- geçerli şemadaki tüm tabloları listele
\d challenges     -- tek bir tablonun yapısını göster (sütunlar, türler, dizinler)
\timing on        -- her sorgunun yürütme süresini göster
\q                -- konsoldan çık

Bu meta komutlar salt psql uzantılarıdır — yalnızca psql’in kendisinde çalışır; aynı satırı yalnızca gerçek SQL anlayan bir programa (örneğin bir uygulamadaki veri tabanı kütüphanesi) gönderirsen çalışmaz.

Geri yükleme hatalarının sık nedenleri

Bir pg_dump dışa aktarımı geri yüklemede tipik olarak üç nedenden biriyle başarısız olur: (1) dışa aktaran pg_dump sürümü ile içe aktaran psql/sunucu sürümü arasında sürüm uyumsuzluğu (bu yüzden ikisini de güncel tut), (2) kaynak veri tabanı pgcrypto gibi PostgreSQL uzantıları kullandıysa hedef veri tabanında eksik uzantılar veya (3) tek tek tabloları (tam veri tabanı yerine) yüklerken henüz var olmayan hedef tablolara işaret eden yabancı anahtar kısıtlamaları — burada --data-only ile önceden bir migrasyonla oluşturulmuş bir hedef şemanın birleşimi yardımcı olur, çünkü o zaman başvurulan tüm tablolar zaten mevcuttur.

Ayrıca bak: Neon, SQL