Komut satırı bağımsız değişkenlerini kullanarak PostgreSQL .sql dosyasını çalıştırın


540

Onları binlerce INSERT deyimleri ile bazı .sql dosyaları var ve bir tabloya eklemek için PostgreSQL veritabanımda bu ekleri çalıştırmak gerekir. Dosyalar o kadar büyüktür ki, bunları açıp INSERT ifadelerini bir editör penceresine kopyalayıp orada çalıştırmanın imkansız olduğunu göreceksiniz. İnternette PostgreSQL kurulumunuzun bin klasörüne giderek aşağıdakileri kullanabileceğinizi buldum:

psql -d myDataBase -a -f myInsertFile

Benim durumumda:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

Daha sonra kullanıcım için bir parola isteniyor, ancak hiçbir şey giremiyorum ve enter tuşuna bastığımda bu hatayı alıyorum:

psql: FATAL: "myUsername" kullanıcısı için şifre kimlik doğrulaması başarısız oldu

Neden bir şifre girmeme izin vermiyor? Bu komut dosyalarını çalıştırabildiğim için kritik bir yol var mı?

Aşağıdaki yapıya sahip pg_hba.conf dosyama yeni bir giriş ekleyerek bu sorunu çözdüm:

# IPv6 local connections:
host    myDbName    myUserName ::1/128    trust

Pg_hba.conf dosyası genellikle PostgreSQL kurulumunuzun 'data' klasöründe bulunur.


6
Cevabınızı zaten aldınız ama her ihtimale karşı ... "Hiçbir şey giremiyorum", şifrenizi yazmanın hiçbir şey göstermediğinden bahsediyor musunuz? Yani normalde şifreyi yazıp Enter tuşuna basarak, bu durumda normal olmalıdır ... çalışmak
Evelyne Lachance

ITIS'in ( itis.gov ) bir kopyasını yüklerken benzer bir sorun yaşadım . Veritabanı yoktu, bu yüzden adını kullanamadım. PostgreSQL'in çalışma şekli nedeniyle bunu yapabilirim: psql --port = 5554 - kullanıcı adı = kök - dosya = ITIS.sql template1
Cyberknight

Yanıtlar:


157

Şifre sağlamak için dört seçeneğiniz vardır:

  1. PGPASSWORD ortam değişkenini ayarlayın. Ayrıntılar için kılavuza bakın:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. Parolayı saklamak için bir .pgpass dosyası kullanın. Ayrıntılar için el kitabına bakın:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. Söz konusu kullanıcı için "güven kimlik doğrulaması" kullanın: http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. PostgreSQL 9.1'den bu yana bir bağlantı dizesi de kullanabilirsiniz :
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

Selam. Şimdi ayarları güvenilecek şekilde ayarladım ancak yazılımın oturum açmak için Windows kullanıcı adımı kullanmaya çalıştığını fark ettim. Postgresql veritabanımda kurmuş olduğum bir rolü kullanmak istiyorum. Komutu çalıştırmak için hangi rolü kullanacağını söylemenin bir yolu var mı?
Mart'ta CSharpened

2
@CSharpened: -uparametreyi kılavuzda belgelendiği şekilde kullanın
a_horse_with_no_name 16:12

# 2 son derece basittir. Sadece bir dosyaya host: port: db: user: pass içeren bir satır ekleyin ve işiniz bitti. İyi iş.
Kriil

494

Elbette, kullanıcı adı eklemediğiniz için kimlik doğrulaması için önemli bir hata alırsınız ...

Bunu deneyin, benim için sorun yok :)

psql -U username -d myDataBase -a -f myInsertFile

Veritabanı uzaksa, host ile aynı komutu kullanın

psql -h host -U username -d myDataBase -a -f myInsertFile

4
Sağlanan kullanıcı adının geçerli bir postgres rolü olması gerektiğini unutmayın. Varsayılan, şu anda oturum açmış olan kullanıcıdır.
matthias krull

8
Neden -aparam?
AlikElzin-kilaka

5
@ AlikElzin-kilaka -aburada gerekli değildir. "Tüm boş olmayan girdi satırlarını okundukları gibi standart çıktıya yazdır"
mjspier

Kabul edilen cevap bu olmalıdır.
Kostanos

316

Bunu şu şekilde yapmalısınız:

\i path_to_sql_file

Görmek:

Resim açıklamasını buraya girin


2
AnladımPermission denied
Zac

4
chmod 777 myfilehata yaptıktan sonra Permission denieddüzeltildi
Ulug'bek Ro'zimboyev

5
@Zac İzniniz bir Windows makinesinde reddedildiyse, yanlış eğik çizgiler kullanıyor olabilirsiniz.
pgsandstrom

2
Ben pencerelerde bu hatayı vardı ve @pgsandstrom belirtildiği gibi, eğik çizgiler olduğu ortaya çıktı. Yanlış eğik çizgiler = bunun yerine eğik çizgi kullanın ve yol üzerinde alıntı yok. \ ic: /dev/script.sql
Dave

50

PostgreSQL sunucusu farklı bir yerde bulunduğunda * .sql dosyalarını çalıştırmak için bunu kullanın:

psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

-h PostgreSQL server IP address
-d database name
-U user name
-p port which PostgreSQL server is listening on
-f path to SQL script
-a all echo
-q quiet

Ardından kullanıcının parolasını girmeniz istenir.

EDIT: @zwacky tarafından sağlanan yoruma göre güncellendi


5
@ ChickenWing24 -a: tüm yankı ,: -qsessiz -f
,:

Bu kendi sorunumu çözdü, harika
Temi 'Topsy' Bello

45
export PGPASSWORD=<password>
psql -h <host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql

1
çıktı olmadan bunu nasıl yapabilirim
Lu32

2
psql -h <host> -d <veritabanı> -U <kullanıcı_adı> -p <bağlantı noktası> -a -q -w -f <file> .sql
vishu9219 10:16

3
@ Lu32 -a bayrağını da bırakabilirsiniz (bu, "Tüm boş olmayan girdi satırlarını okundukları gibi standart çıktıya yazdır" anlamına gelir). EDIT test edilmiştir, -a olmadan daha az yazdırır, ancak yine de çok fazla bilgi yazdırır. Vishu9219'un dediği gibi -q bayrağı doğrudur.
Rauni Lillemets

41

Linux kabuğunda psql'de oturum açtıysanız, komut şöyledir:

\i fileName.sql

mutlak bir yol için ve

\ir filename.sql

psql adını verdiğiniz göreli yol için.


@Florian'ın dediği gibi, giriş yaptıktan sonra bir dosya yürütebilirsiniz. SQL'inizdeki herhangi bir açıklama satırını iki yoldan biri olarak işaretlemeyi unutmayın ...-- satır sonuna yorum yapın a) - bir satır yorumu VEYA b) / * birden fazla satır yorumu * /
Sumit

26

Terminal oturum açarak veritabanınıza giriş yapın ve şunu deneyin:

database-# >@pathof_mysqlfile.sql

veya

database-#>-i pathof_mysqlfile.sql

veya

database-#>-c pathof_mysqlfile.sql

bu çözüm benim için daha sağlam; değil
answe

17

Komut satırında hem kullanıcı adı hem de PASSSWORD verebilirsiniz.

   psql "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql

Ortam değişkenlerini ayarlamak veya garip geçiş dosyaları kullanmak istemiyorsanız bu işe yarar. =)
martin

bu kabul edilen cevap olmalı, teşekkürler
grepit

13

hatta şu şekilde yapabilirsiniz:

sudo -u postgres psql -d myDataBase -a -f myInsertFile

sudoMakinede erişiminiz varsa ve sadece kendi makinenizde test etmek için üretim komut dosyaları için önerilmezse, bu en kolay yoldur.


9

Linux'ta PostgreSQL için komut satırında nasıl SQL çalıştırılacağına bakın:

Bir terminal açın ve psqlkomutu çalıştırabildiğinizden emin olun :

psql --version
which psql

Mine, 9.1.6 sürümünde bulunmaktadır /bin/psql.

Adlı düz bir metin dosyası oluşturun mysqlfile.sql

Bu dosyayı düzenleyin, buraya tek bir satır ekleyin:

select * from mytable;

Bu komutu komut satırında çalıştırın (pgadmin ve kurz_prod yerine kullanıcı adınızı ve veritabanınızın adını yazın):

psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql

Terminalde aldığım sonuç aşağıdadır (Parola istenmez):

select * from mytable;

test1
--------
hi
me too

(2 rows)

Bir kullanıcıyı nasıl kurarsınız? Yeni bir .sql dosyasına -f'yi ilk kez yükleyip çalıştırıyorum. Her zaman yanlış şifre diyor
mKane

4

Bir komut istemi açabilir ve yönetici olarak çalıştırabilirsiniz. Sonra yazın

../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"

Password for user postgres: görünecek.

Parolanızı yazın ve girin. Yazdığım şifreyi göremedim, ama bu sefer enter tuşuna bastığımda işe yaradı. Aslında veritabanına veri yüklüyordum.


Demek istediniz-d "postgres"
amphetamachine

-d veritabanı adı için @amphetamachine , kontrol edinpsql --help
Yaz

1

Ben yazdım (benim komut dosyası olduğu dizinde bulunan) elde

::someguy@host::$sudo -u user psql -d my_database -a -f file.sql 

nerede -u user komut dosyası yürütmek istediğiniz veritabanına sahip olan rol nihayet sonra bana yükler konsola psqlbağlanır ve burada komuttan tüm girdi yankı ve içine komutları yürütmek , sonra çıkmak.psql-d my_databasemydatabase-a -f file.sql-a-ffile.sqlmydatabase

Kullanıyorum: psql (PostgreSQL) 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)

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.