เรียกใช้แบบสอบถาม PostgreSQL จากบรรทัดคำสั่ง


278

ฉันแทรกข้อมูลลงในตาราง .... ฉันต้องการดูทั้งตารางด้วยแถวและคอลัมน์และข้อมูล ฉันจะแสดงมันผ่านคำสั่งได้อย่างไร

คำตอบ:


475

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

หากคุณยังใหม่กับ postgresql และไม่คุ้นเคยกับการใช้เครื่องมือบรรทัดคำสั่งpsqlมีพฤติกรรมที่สับสนบางอย่างที่คุณควรทราบเมื่อคุณเข้าสู่เซสชันแบบโต้ตอบ

ตัวอย่างเช่นเริ่มต้นเซสชันแบบโต้ตอบ:

psql -U username mydatabase 
mydatabase=#

ณ จุดนี้คุณสามารถป้อนแบบสอบถามได้โดยตรง แต่คุณต้องอย่าลืมยกเลิกแบบสอบถามด้วยเครื่องหมายอัฒภาค;

ตัวอย่างเช่น:

mydatabase=# SELECT * FROM mytable;

หากคุณลืมเครื่องหมายอัฒภาคดังนั้นเมื่อคุณกด Enter คุณจะไม่ได้รับสิ่งใดในบรรทัดส่งคืนเนื่องจากpsqlจะถือว่าคุณยังไม่ได้ป้อนข้อความค้นหาของคุณ สิ่งนี้สามารถนำไปสู่ความสับสนทุกชนิด ตัวอย่างเช่นหากคุณป้อนคำถามเดียวกันอีกครั้งคุณจะมีข้อผิดพลาดทางไวยากรณ์

เป็นการทดลองให้ลองพิมพ์ garble ใด ๆ ที่คุณต้องการที่พร้อมท์ psql แล้วกด Enter psqlจะให้บรรทัดใหม่กับคุณอย่างเงียบ ๆ หากคุณป้อนเครื่องหมายอัฒภาคบนบรรทัดใหม่นั้นจากนั้นกด Enter คุณจะได้รับข้อผิดพลาด:

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

กฎของหัวแม่มือคือ: ถ้าคุณไม่ได้รับการตอบสนองจากpsqlแต่คุณคาดหวังอย่างน้อยบางอย่างจากนั้นคุณลืมเครื่องหมายอัฒภาค;


4
อย่างน้อย 7.2 (นั่นคือย้อนหลังไปมากที่สุดเท่าที่ฉันใส่ใจที่จะตรวจสอบมันอาจจะเร็วกว่านี้) psql จึงมีตัวเลือก--single-line(หรือ-s) ที่ทำให้ทุกคำสั่งทันทีโดยไม่จำเป็นต้องเพิ่มเซมิโคลอน
Gordon

3
ฉันใช้เวลาหนึ่งชั่วโมงในการดีบักและปัญหาคือเซมิโคลอนหายไป ขอบคุณ
Dawson B

106
SELECT * FROM my_table;

ที่my_tableเป็นชื่อของตารางของคุณ

แก้ไข:

psql -c "SELECT * FROM my_table"

หรือเพียงแค่psqlพิมพ์แบบสอบถามของคุณ


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

3
เป็นกล่าวว่าคุณควรจะจบคำสั่งของคุณด้วยเครื่องหมายอัฒภาค; หากคุณอยู่ในระบบ windows ให้ดูnotws สำหรับผู้ใช้ windows โดยทั่วไปเพียงแค่ใส่cmd.exe /c chcp 1252หลังจากคุณเปิดพร้อมท์คอนโซล
D_Guidi

2
สำหรับผู้ใช้ในอนาคตให้แน่ใจว่าได้เพิ่ม -d หน้าชื่อฐานข้อมูลของคุณและ -c ก่อนการสืบค้น: psql -U ชื่อผู้ใช้ -d mydatabase -c 'เลือก * จาก mytable'
jmhead

2
ไม่ทำงานสำหรับฉันฉันทำpsql: FATAL: database "SELECT * FROM tb_name" does not exist
Jaswinder

ตามที่ระบุ @DrColossos ดูเหมือนว่าเครื่องหมายอัญประกาศคู่รอบคำสั่งจำเป็นจากสภาพแวดล้อม Windows cli / batch อย่างน้อย
jewbix.cube

43

หากฐานข้อมูลของคุณได้รับการป้องกันด้วยรหัสผ่านวิธีแก้ไขจะเป็นดังนี้:

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

3
ไม่ทราบว่าสามารถให้รหัสผ่านด้วยวิธีนี้ มันมีประโยชน์จริง ๆ เมื่อทำการทดสอบ ขอบคุณ
zhihong

21

เปิด "SQL Shell (psql)" จาก Applications (Mac) ของคุณ

ป้อนคำอธิบายรูปภาพที่นี่

คลิกป้อนการตั้งค่าเริ่มต้น ป้อนรหัสผ่านเมื่อได้รับแจ้ง

ป้อนคำอธิบายรูปภาพที่นี่

*) พิมพ์\?เพื่อขอความช่วยเหลือ

*) พิมพ์\conninfoเพื่อดูผู้ใช้ที่คุณกำลังเชื่อมต่อเป็น

*) พิมพ์\lเพื่อดูรายการฐานข้อมูล

ป้อนคำอธิบายรูปภาพที่นี่

*) เชื่อมต่อกับฐานข้อมูล\c <Name of DB>ตัวอย่างเช่น\c GeneDB1

ป้อนคำอธิบายรูปภาพที่นี่

คุณควรเห็นการแจ้งขอเปลี่ยนคีย์เป็น DB ใหม่ดังนี้: ป้อนคำอธิบายรูปภาพที่นี่

*) ตอนนี้เมื่อคุณอยู่ในฐานข้อมูลที่กำหนดคุณต้องการทราบ Schemas สำหรับฐานข้อมูลนั้น \dnคำสั่งที่ดีที่สุดที่จะทำคือ

ป้อนคำอธิบายรูปภาพที่นี่

คำสั่งอื่น ๆ ที่ใช้งานได้ (แต่ไม่ดีเท่า) select schema_name from information_schema.schemata;และselect nspname from pg_catalog.pg_namespace;:

ป้อนคำอธิบายรูปภาพที่นี่

-) เมื่อคุณมี Schemas แล้วคุณต้องการรู้ตารางใน Schemas เหล่านั้น เพื่อที่คุณสามารถใช้dtคำสั่ง ตัวอย่างเช่น\dt "GeneSchema1".*

ป้อนคำอธิบายรูปภาพที่นี่

*) ตอนนี้คุณสามารถทำข้อสงสัยของคุณ ตัวอย่างเช่น:

ป้อนคำอธิบายรูปภาพที่นี่

*) นี่คือลักษณะของ DB, Schema และ Tables ด้านบนใน pgAdmin:

ป้อนคำอธิบายรูปภาพที่นี่


3
  1. เปิดพร้อมท์คำสั่งและไปที่ไดเรกทอรีที่ติดตั้ง Postgres ในกรณีของฉันเส้นทาง Postgresของฉันคือ "D: \ TOOLS \ Postgresql-9.4.1-3" หลังจากนั้นย้ายไปยังไดเรกทอรีถังขยะของพรอมต์คำสั่ง Postgres.So แสดงเป็น "D: \ TOOLS \ Postgresql-9.4.1-3 \ bin>"
  2. ตอนนี้เป้าหมายของฉันคือการเลือก "ชื่อผู้ใช้" จากตารางผู้ใช้โดยใช้ค่า "UserId" ดังนั้นแบบสอบถามฐานข้อมูลคือ " Select u." ชื่อผู้ใช้ "จากผู้ใช้ u โดยที่คุณอยู่ที่ไหน" UserId "= 1 "

แบบสอบถามเดียวกันเขียนไว้ด้านล่างสำหรับพรอมต์คำสั่ง psql ของ postgres

D: \ TOOLS \ Postgresql-9.4.1-3 \ bin> psql -U postgres -d DatabaseName -h localhost - t -c "เลือกคุณ \" ชื่อผู้ใช้ \ "จากผู้ใช้ u ที่คุณ \ \" UserId \ "= 1;


3

ฉันไม่สงสัยเลยในคำตอบของ @Grant แต่ฉันต้องเผชิญกับปัญหาเล็กน้อยบางครั้งเช่นถ้าชื่อคอลัมน์คล้ายกับคำสำคัญที่สงวนไว้ของ postgresql เช่นเป็นธรรมชาติในกรณีนี้ SQL ที่คล้ายกันนั้นยากที่จะเรียกใช้จากบรรทัดคำสั่งเนื่องจากจะต้องใช้ "\ natural \" ในเขตข้อมูล Query ดังนั้นวิธีการของฉันคือการเขียน SQL ในไฟล์แยกต่างหากและเรียกใช้ไฟล์ SQL จากบรรทัดคำสั่ง นี่ก็มีข้อดีอีกอย่างเช่นกัน หากคุณต้องเปลี่ยนแบบสอบถามสำหรับสคริปต์ขนาดใหญ่คุณไม่จำเป็นต้องแตะไฟล์สคริปต์หรือคำสั่ง เปลี่ยนไฟล์ SQL แบบนี้เท่านั้น

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

3

ฉันยังสังเกตเห็นว่าแบบสอบถาม

SELECT * จากแท็บเล็ต;

ให้ข้อผิดพลาดในพรอมต์คำสั่ง psql และ

เลือก * จาก "tablename";

ทำงานได้ดีแปลกจริงๆอย่าลืมเครื่องหมายคำพูดคู่ ฉันชอบฐานข้อมูลเสมอ :-(


-8

สำหรับข้อความเฉพาะบางประเภทคุณสามารถค้นหาความเหมาะสมในการใช้งานAzure Data Studio- สำหรับทุกอย่างที่มาพร้อมกับบรรทัดคำสั่งในตัว การใช้สตูดิโอคุณสามารถค้นหาข้อความสั่งการพิมพ์และอ่านผลลัพธ์ได้อย่างสะดวกสบายยิ่งขึ้น

ทำตามขั้นตอนด้านล่าง:

  1. ติดตั้งAzure Data Studio - เป็นเครื่องมือแก้ไขข้ามแพลตฟอร์มที่เน้นการพัฒนาข้อมูล มันเป็นโอเพนซอร์ซและสามารถขยายได้ - สองสิ่งที่ PostgreSQL นั้นมีพื้นฐานมาจาก;
  2. ติดตั้งส่วนขยาย PostgreSQL
  3. เชื่อมต่อกับเซิร์ฟเวอร์ภายในหรือระยะไกลของคุณ:

    ป้อนคำอธิบายรูปภาพที่นี่

  4. เน้นที่การเขียนและดำเนินการ SQL เท่านั้น:

    ป้อนคำอธิบายรูปภาพที่นี่

มีหลายpsqlคุณสมบัติที่ดีทั้งประหยัดการเชื่อมต่อการสร้างกลุ่มเซิร์ฟเวอร์และในตัวแม้ขั้วถ้าคุณมีความสะดวกสบายมากขึ้นการทำงานบางอย่างผ่าน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.