PostgreSQL sorgularını komut satırından çalıştırma


278

Bir tabloya veri ekledim .... Şimdi satırları, sütunları ve verileri içeren tüm tabloyu görmek istiyorum. Komut aracılığıyla nasıl görüntüleyebilirim?

Yanıtlar:


475

psql -U username -d mydatabase -c 'SELECT * FROM mytable'

Postgresql'de yeniyseniz ve komut satırı aracını kullanmaya alışkın psqldeğilseniz, etkileşimli bir oturuma girdiğinizde bilmeniz gereken bazı kafa karıştırıcı davranışlar vardır.

Örneğin, etkileşimli bir oturum başlatın:

psql -U username mydatabase 
mydatabase=#

Bu noktada doğrudan bir sorgu girebilirsiniz, ancak sorguyu noktalı virgülle sonlandırmayı unutmayın.;

Örneğin:

mydatabase=# SELECT * FROM mytable;

Noktalı virgül unutursanız, enter tuşuna bastığınızda dönüş satırınızda hiçbir şey elde psqledemezsiniz, çünkü sorgunuzu girmeyi tamamlamadığınızı varsayarsınız. Bu her türlü karışıklığa neden olabilir. Örneğin, aynı sorguyu yeniden girerseniz, büyük olasılıkla bir sözdizimi hatası oluşturmuş olursunuz.

Bir deneme olarak, psql istemine istediğiniz herhangi bir garble yazmayı deneyin ve enter tuşuna basın. psqlsize sessizce yeni bir hat sunacaktır. Söz konusu yeni satıra noktalı virgül girip enter tuşuna basarsanız, ERROR alırsınız:

mydatabase=# asdfs 
mydatabase=# ;  
ERROR:  syntax error at or near "asdfs"
LINE 1: asdfs
    ^

Temel kural şudur: Eğer yanıt almadıysanız psqlama en azından SOMETHING bekliyorduysanız, noktalı virgül unuttunuz;


4
En az 7.2 olduğundan (kontrol etmek için uğraştığım kadarıyla, daha erken olabilir), psql, noktalı virgül eklemeye gerek kalmadan her komutu hemen yapan seçeneğe --single-line(veya -s) sahipti .
Gordon

3
Ben hata ayıklama bir saat geçirdim ve sorun eksik noktalı virgül oldu. TEŞEKKÜR EDERİZ
Dawson B

106
SELECT * FROM my_table;

my_tabletablonuzun adı nerede .

DÜZENLE:

psql -c "SELECT * FROM my_table"

ya da sadece psqlve sonra sorgularınızı yazın.


7
psql -U username -c your_database "SELECT * FROM my_table"
DrColossos

3
söylendiği gibi, komutunuzu noktalı virgülle bitirmelisiniz ; Windows sistemindeyseniz, konsol istemini açtıktan sonra yalnızca Windows kullanıcıları için notlara bakın cmd.exe /c chcp 1252.
D_Guidi

2
gelecekteki kullanıcılar için, veritabanı adınızdan önce -d'yi ve sorgudan önce -c'yi eklediğinizden emin olun: psql -U kullanıcı adı -d mydatabase -c 'SELECT * FROM mytable'
jmhead

2
Benim için çalışmadı. psql: FATAL: database "SELECT * FROM tb_name" does not exist
Yaptım

@DrColossos'un belirttiği gibi, komutun etrafında çift tırnak en azından Windows cli / batch ortamlarından gerekli görünüyor.
jewbix.cube

43

DB'niz şifre korumalıysa, çözüm şöyle olur:

PGPASSWORD=password  psql -U username -d dbname -c "select * from my_table"

3
Asla bilemezsiniz bu şekilde şifre sağlayabilir. Test yaparken gerçekten kullanışlıdır. Teşekkürler
zhihong

21

Uygulamalarınızdan (Mac) "SQL Shell (psql)" uygulamasını açın.

resim açıklamasını buraya girin

Varsayılan ayarlar için enter'a tıklayın. İstendiğinde şifreyi girin.

resim açıklamasını buraya girin

*) \?Yardım türü

*) \conninfoHangi kullanıcı olarak bağlandığınızı görmek için yazın.

*) \lVeritabanlarının listesini görmek için yazın.

resim açıklamasını buraya girin

*) Bir veritabanına \c <Name of DB>örneğin\c GeneDB1

resim açıklamasını buraya girin

Yeni DB'de anahtar isteminin değiştiğini görmelisiniz, şöyle: resim açıklamasını buraya girin

*) Artık belirli bir DB'de olduğunuza göre, o DB için Şemaları bilmek istiyorsunuz. Bunu yapmak için en iyi komut \dn.

resim açıklamasını buraya girin

Ayrıca işin bu diğer komutlar (ancak iyi gibi) vardır select schema_name from information_schema.schemata;ve select nspname from pg_catalog.pg_namespace;:

resim açıklamasını buraya girin

-) Artık Şemalara sahip olduğunuza göre, bu Şemalardaki tabloları bilmek istiyorsunuz. Bunun için dtkomutu kullanabilirsiniz . Örneğin\dt "GeneSchema1".*

resim açıklamasını buraya girin

*) Şimdi sorgularınızı yapabilirsiniz. Örneğin:

resim açıklamasını buraya girin

*) Yukarıdaki DB, Şema ve Tabloların pgAdmin'de nasıl göründüğü aşağıda açıklanmıştır:

resim açıklamasını buraya girin


3
  1. Bir komut istemi açın ve Postgres'in yüklü olduğu dizine gidin. Benim durumumda Postgres yolum "D: \ TOOLS \ Postgresql-9.4.1-3". Bundan sonra Postgres.So komut isteminin bin dizinine taşıyın, "D: \ TOOLS \ Postgresql-9.4.1-3 \ bin>"
  2. Şimdi amacım kullanıcı tablosundan "UserId" değerini kullanarak "KullanıcıAdı" nı seçmek. Bu nedenle veritabanı sorgusu "Kullanıcı seçin u." KullanıcıAdı "u Nerede u. U" Kullanıcı Kimliği "= 1 "

Aynı sorgu postgres psql komut istemi için aşağıdaki gibi yazılır.

D: \ TOOLS \ Postgresql-9.4.1-3 \ bin> psql -U postgres -d VeritabanıAdı -h localhost - t -c "Kullanıcılardan u seçin. \" KullanıcıAdı \ "u Nerede u. \" UserId \ "= 1 'dir;


3

@Hibe cevabı konusunda hiç şüphem yok. Ancak, sütun adının doğal gibi herhangi bir ayrılmış postgresql anahtar sözcüğüne benzemesi gibi bazen birkaç sorunla karşılaşıyorum . Yani benim yaklaşım SQL ayrı bir dosyaya yazmak ve SQL dosyasını komut satırından çalıştırmak. Bunun başka bir avantajı daha var. Büyük bir komut dosyasının sorgusunu değiştirmeniz gerekiyorsa, komut dosyası dosyasına veya komutuna dokunmanız gerekmez. SQL dosyasını sadece böyle değiştirin

psql -h localhost -d database -U postgres -p 5432 -a -q -f /path/to/the/file.sql

3

Ayrıca sorguyu

SEÇ * tablo adından;

psql komut isteminde bir hata verir ve

"Tablename" den SELECT *;

iyi, gerçekten garip çalışır, bu yüzden çift tırnak unutmayın. Veritabanlarını hep sevdim :-(


-8

Belirli türdeki ifadelerde, kullanıma daha uygun bulabilirsiniz - diğer Azure Data Studioher şey için yerleşik komut satırı ile birlikte gelir. Stüdyosu kullanarak yazma ifadelerini ve çıktıyı daha rahat okuyabilirsiniz.

Aşağıdaki adımları takip et:

  1. Azure Data Studio'yu yükleyin - veri geliştirmeye odaklanan platformlar arası modern bir editördür; açık kaynak kodlu ve genişletilebilir - PostgreSQL'in kendisinin dayandığı iki şey;
  2. PostgreSQL uzantısını yükleyin
  3. Yerel veya uzak sunucunuza bağlanın:

    resim açıklamasını buraya girin

  4. Yalnızca SQL yazmaya ve yürütmeye odaklanın:

    resim açıklamasını buraya girin

Bağlantıları kaydetme, sunucu grupları oluşturma ve hatta yerleşik terminal aracılığıyla daha rahat olursanız , birçok güzel özellik vardır psql.

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.