psql: SELECT * …ยกเว้นหนึ่งคอลัมน์


10

ฉันค้นหาวิธีง่ายๆในการเลือกคอลัมน์ทั้งหมดยกเว้นคอลัมน์หนึ่งใน psql

ด้วยความpsqlที่ผมหมายถึงบรรทัดคำสั่งแบบโต้ตอบ

ฉันจะมีความสุขกับเครื่องมือที่ขยายไป*ยังรายการชื่อคอลัมน์ที่ยกมา จากนั้นฉันสามารถลบคอลัมน์เพื่อลบด้วยมือ

คำถามของฉันเกี่ยวกับการใช้งานแบบโต้ตอบของ psql มันไม่ได้เป็นคำถามซ้ำ ๆ ของคนที่ไม่พอใจมาตรฐานของ sql และผู้ที่ต้องการดำเนินการบางอย่างเช่น "select * -foo"


3
ไม่มีใครขอโทษ คุณสามารถสืบค้นinformation_schemaผ่านฟังก์ชั่น pl / pgsql เพื่อสร้างรายการได้อย่างง่ายดาย แต่นั่นเป็นสองแบบสอบถาม
Craig Ringer

2
เครื่องมือ GUI ส่วนใหญ่สามารถทำได้ แต่ถ้าคุณต้องการ (หรือต้อง) ติดกับบรรทัดคำสั่งบางทีสิ่งนี้จะช่วยได้: github.com/dbcli/pgcli
a_horse_with_no_name

@a_horse_with_no_name ฉันต้องการยอมรับ "คำตอบ" ของคุณ คุณช่วยกรุณาโพสต์คำตอบและอธิบายการใช้เครื่องมือ pgcli ในการแก้ปัญหาได้ไหม
guettli

ยกเว้นคอลัมน์ใด สุดท้าย? คนแรก? หรือสุ่มอย่างใดอย่างหนึ่ง?
BAE

1
@ChengchengPei: ไม่มีdescคำสั่งในpsql
a_horse_with_no_name

คำตอบ:


4

วิธีรับรายการคอลัมน์ตามลำดับเริ่มต้นโดยไม่มีคอลัมน์เสีย:

SELECT string_agg(quote_ident(attname), ', ' ORDER BY attnum)
FROM   pg_attribute
WHERE  attrelid = 'myschema.mytable'::regclass
AND    NOT attisdropped  -- no dropped (dead) columns
AND    attnum > 0        -- no system columns
AND    attname <> 'bad_column'  -- case sensitive!

หรือเพียงแค่WHERE attrelid = 'mytable'::regclassถ้าคุณเชื่อถือพา ธ การค้นหาเพื่อแก้ไขสคีมาที่ถูกต้อง

quote_ident() เพิ่มเครื่องหมายคำพูดคู่เมื่อจำเป็น

ฉันถามคำถามเดียวกันในปี 2007 ใน pgsql มันเป็น Postgres 8.2 ในตอนนั้น ความทรงจำอันแสนหวาน ...

ที่เกี่ยวข้อง:


1
ดูเหมือนว่าเป็นรายการที่ต้องทำเพื่อเพิ่มคำสั่ง backslash ไปยัง psql ซึ่งจะปล่อยสตริงซึ่งเป็นรายการของคอลัมน์ทั้งหมดสำหรับตารางที่ยกมาอย่างเหมาะสม และคุณสามารถให้มันละเว้นคอลัมน์ใด ๆ ที่รวมอยู่ในอาร์กิวเมนต์พิเศษของคำสั่ง \dq thetable bad_columnดังนั้นสมมุติฐาน
jjanes

@jjanes: ฉันไม่แน่ใจว่ามันสามารถสร้างความต้องการเพียงพอที่จะโน้มน้าวใจผู้พัฒนาหลักในการจัดสรรจดหมายฟรีqสำหรับงาน อาจเป็นตัวเลือกทั่วไปสำหรับทั้งครอบครัวของ\dคำสั่งเพื่อแสดงรายการของชื่อที่ต่อกันหรือเปล่า? เช่นเดียวกับ\d- tbl(ความจำ: ตรงข้ามของ\d+ซึ่งแสดงให้เห็นมากขึ้นรายละเอียด) นี้จะช่วยให้เพื่อให้ได้พื้นใด ๆรายการเปลือยของวัตถุ ตารางในสคีมา: \dt- public.*ฟังก์ชั่นเริ่มต้นด้วย "f_foo" \df- f_foo*ฯลฯ - \d- mytblหรือคอลัมน์ในตาราง: คล้ายกับสิ่งที่คำสั่ง shell lsทำ ...
Erwin Brandstetter

ฉันให้ความโปรดปรานแก่คุณ แต่สิ่งที่มีอยู่แล้วใน psql จะเป็นคุณสมบัติที่ดีจริงๆ ขอบคุณเออร์วิน :-)
guettli

0

ฉันคิดว่าฉันได้พบสิ่งที่คุณกำลังมองหา แต่ฉันไม่ได้ทดสอบด้วยตัวเอง

มีซอฟต์แวร์ชื่อ SequelPro ที่จะช่วยให้คุณสามารถเลือกเขตข้อมูลจากตารางที่กำหนด แต่สำหรับ MySQL เท่านั้น โปรดอ่านจากด้านล่างจากบางแห่งที่อยู่ตรงกลางของหน้า:

http://www.sequelpro.com/docs/Working_with_Query_Favorites

มีซอฟต์แวร์อื่นที่เรียกว่า PSequel ซึ่งทำงานบน Mac เท่านั้นและอ้างว่าเป็นชนิด SequelPro ที่สร้างขึ้นสำหรับ Postgres:

http://www.psequel.com/

หวังว่านี่จะช่วยได้

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