PostgreSQL 8.4'te mevcut * .sql dosyaları nasıl içe aktarılır?


105

PostgreSQL 8.4 kullanıyorum ve bir veritabanına aktarmak için bazı * .sql dosyalarım var. Bunu nasıl yapabilirim?

Yanıtlar:


142

Komut satırından:

psql -f 1.sql
psql -f 2.sql

Gönderen psqlistemi:

\i 1.sql
\i 2.sql

Dosyaları belirli bir sırada içe aktarmanız gerekebileceğini unutmayın (örneğin: veri işlemeden önce veri tanımı). Eğer var ise bashkabuk (GNU / Linux, Mac OS X, Cygwin) ve dosyalar alfabetik sıraya göre ithal edilebilir , bu komutu kullanabilirsiniz:

for f in *.sql ; do psql -f $f ; done

İşte psqluygulamanın belgeleri (teşekkürler, Frank): http://www.postgresql.org/docs/current/static/app-psql.html


@moon SQL dosyalarına erişim hakkınız olmayabilir mi? Hangi işletim sistemini kullanıyorsunuz?
Bolo

@moon Bu, PostgreSQL kullanıcınızla ilişkili paroladır (kullanıcı geçiş çifti PostgreSQL'de saklanır).
Bolo

8
@moon, probleminizi üç aşamaya ayırmanızı öneririm: 1) kaçabildiğinizden emin olun psql. : 2) emin olun kullanıcı gibi gerekli yazma ayrıcalıkları vardır CREATE, INSERT, UPDATEvb 3) içe SQL dosyaları. Anladığım kadarıyla, şu anda 1. aşamadasın.
Bolo

@Bolo: Cevaba üç aşamayı koyar mısın?
AH

@Bolo, bahsettiğin gibi şimdi üçüncü adımdayım. ancak yerel makinemden .sql dosyasını nasıl içe aktarabilirim. \ İ [uzantılı tam yolu] denedim ama .sql hata mesajını alıyorum böyle bir dosya veya dizin yok. Lütfen bir örnek verebilir misiniz?

75

komut satırında önce psql'nin bulunduğu dizine ulaşın ve ardından aşağıdaki gibi komutları yazın:

psql [database name] [username]

ve ardından enter tuşuna basın psql şifre ister kullanıcı şifresini verir:

sonra yaz

> \i [full path and file name with extension]

ardından enter tuşuna basın ekleme işlemi tamamlandı.


Bunu ben de kullanıyorum. Ve çalışıyor. Ancak, sağlanan SQL ifadelerini değiştiriyorum. Önceden var olan * .sql herhangi bir karakter kullanmıyordu; bir satırın sonlandırılması olarak. Ayrıca GO'yu çıkarmalıyım. Sql betiğinin bir psql betiği olmadığını düşünüyor musunuz?
swdev

\ İ [uzantılı tam yol] kullanmayı denedim ama .sql hata mesajını alıyorum böyle bir dosya veya dizin yok. Lütfen bir örnek yükler misiniz? Teşekkürler.

Böyle bir dosya yok diyorsa, o konumda bir dosya bulamamıştır. Mutlak URL'yi vermek en iyisidir. Windows'ta benim için bu komut satırı çalıştı: \ i /tmp/robert/test.sql tabii ki o dosyada geçerli SQL komutlarına sahip olmalısınız.
utangaç

36

Bildiğim en kısa yol şudur:

psql -U {user_name} -d {database_name} -f {file_path} -h {host_name}

veritabanı_adı: Dosya verilerinizi hangi veritabanına eklemelisiniz.

file_path: İçe aktarmayı gerçekleştirmek istediğiniz dosyanın mutlak yolu.

host_name: Ana bilgisayarın adı. Geliştirme amaçlı, çoğunlukla localhost.

Konsola bu komutu girdikten sonra, şifrenizi girmeniz istenecektir.


25

"/" Ve "\" konusunda dikkatli olun. Windows'ta bile komut şu biçimde olmalıdır:

\i c:/1.sql

1

Her zaman bir bağlantı hizmeti dosyası kullanmak tercih edilir (arama / google 'psql bağlantı hizmeti dosyası')

O zaman basitçe:

psql service={yourservicename} < {myfile.sql}

yourservicenameServis dosyasından bir bölüm adı nerede .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.