Döküm dosyamı geri yüklemeye çalışıyorum ama bir hataya neden oldu:
psql:psit.sql:27485: invalid command \N
Bir çözüm var mı? Aradım ama net bir cevap alamadım.
Döküm dosyamı geri yüklemeye çalışıyorum ama bir hataya neden oldu:
psql:psit.sql:27485: invalid command \N
Bir çözüm var mı? Aradım ama net bir cevap alamadım.
Yanıtlar:
Postgres, NULL değeri yerine "\ N" kullanır. Ancak tüm psql komutları ters eğik çizgi "\" simgesiyle başlar. Böylece, muhtemelen copy deyimi başarısız olduğunda, ancak bir döküm yükleme devam ettiğinde bu mesajları alabilirsiniz. Bu mesaj yalnızca yanlış alarmdır. COPY deyiminin başarısız olmasının nedeni için önce bir satır aramanız gerekir.
Psql'yi "ilk hatada dur" moduna geçirmek ve hatayı bulmak mümkündür:
psql -v ON_ERROR_STOP=1
create table...
başlangıçta başarısız olduğunda , ancak yükleme devam ettiğinde olabilir .
(pg_restore ... | psql ...) 2>&1 | less
İkili bir dökümden geri yüklemeye çalışırken aynı hata mesajını alıyorum. Eskiden pg_restore
dökümümü geri yüklerdim ve \N
hatalardan tamamen kaçınırdım, örn.
pg_restore -c -F t -f your.backup.tar
Anahtarların açıklaması:
-f, --file=FILENAME output file name
-F, --format=c|d|t backup file format (should be automatic)
-c, --clean clean (drop) database objects before recreating
Bu hatayla geçmişte de karşılaştım. Pavel haklı, bu genellikle pg_restore tarafından oluşturulan komut dosyasındaki bir şeyin başarısız olduğunun bir işaretidir. Tüm "/ N" hatalarından dolayı, çıktının en üstünde gerçek sorunu görmüyorsunuz. Öneririm:
pg_restore
--table=orders full_database.dump > orders.dump
)orders.dump
bir grup kaydı ve silin)Benim durumumda, "hstore" eklentisini henüz kurmadım, bu yüzden komut dosyası en üstte başarısız oluyordu. Hedef veritabanına hstore'u kurdum ve işime geri döndüm.
Dökümünüzü --inserts parametresiyle INSERTS deyimlerini kullanarak oluşturabilirsiniz.
Aynı şey bugün bana da oldu. Sorunu --inserts komutu ile damping yaparak hallettim.
Yaptığım şey:
1) eklerle pg_dump:
pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql
2) psql (dökülmüş dosyanızı geri yükleyin)
psql "dbname=dbnamehere options=--search_path=schemaname" --host hostnamehere --username=usernamehere -f filename.sql >& outputfile.txt
Not-1) Çıkış dosyası eklemenin içe aktarma hızını artıracağından emin olun.
Not-2) psql ile içe aktarmadan önce aynı isim ve sütunlarla tablo oluşturmayı unutmayınız.
Son deneyimime göre, gerçek sorunun kaçış karakterleri veya yeni satırlarla ilgisi olmadığında bu hatayı almak mümkündür. Benim durumumda, A veri tabanından bir döküm oluşturmuştum
pg_dump -a -t table_name > dump.sql
ve onu B veri tabanına geri yüklemeye çalışıyordum
psql < dump.sql
(tabii ki uygun ortam değişkenlerini güncelledikten sonra)
Sonunda anladığım şey, dökümün olmasına rağmen data-only
( -a
seçenek , böylece tablo yapısı açıkça dökümün bir parçası değildir), şemaya özgüdür. Bu, dökümü manuel olarak değiştirmeden schema1.table_name
doldurmak için içinden oluşturulan bir dökümü kullanamayacağım anlamına geliyordu schema2.table_name
. Dökümün manuel olarak değiştirilmesi kolaydı, şema ilk 15 satırda belirtildi.
Aynı sorunu yaşadım, yeni bir veritabanı oluşturdum ve invalid command \N
psql ile geri yüklemeye . Eski veritabanı ile aynı tablo alanını ayarlayarak çözdüm.
Örneğin, eski veritabanı yedeklemesinin tablo alanı "pg_default" vardı, aynı tablo alanını yeni veritabanına tanımladım ve yukarıdaki hata gitti!
Tüm bu örnekleri takip ettim ve hepsi bahsettiğimiz hatayla başarısız oldu:
Postgres'te bir veritabanından diğerine tablo kopyalama
İşe yarayan şey -C ile sözdizimiydi , buraya bakın:
pg_dump -C -t tableName "postgres://$User:$Password@$Host:$Port/$DBName" | psql "postgres://$User:$Password@$Host:$Port/$DBName"
Ayrıca ikisi arasında farklı Şemalar varsa, Tablo kopyalarının çalışması için bir dB'nin şemasını diğerleriyle eşleşecek şekilde değiştirmenin gerekli olduğunu buluyorum, örneğin:
DROP SCHEMA public;
ALTER SCHEMA originalDBSchema RENAME TO public;
SUSE 12'de postgreSQL 10 kullanıyorum, invalid command \N
disk alanını artırarak hatayı çözdüm . Yetersiz disk alanı benim için hataya neden oluyordu. Verilerinizin df -h
çıktıda gideceği dosya sistemine bakarsanız, disk alanınızın bitip bitmediğini anlayabilirsiniz . Dosya sistemi / bağlama% 100 kullanılıyorsa, aşağıdaki gibi bir şey yaptıktan sonra psql -f db.out postgres
(bkz. Https://www.postgresql.org/docs/current/static/app-pg-dumpall.html ) mevcut disk alanını artırmanız gerekebilir. .