psql: CHỌN * Khác ngoại trừ một cột


10

Tôi tìm kiếm một cách đơn giản để chọn tất cả các cột ngoại trừ một cột trong psql.

Với psqltôi có nghĩa là dòng lệnh tương tác.

Tôi sẽ rất vui với một công cụ mở rộng *thành một danh sách các tên cột được trích dẫn. Sau đó tôi có thể loại bỏ cột để loại bỏ bằng tay.

Câu hỏi của tôi chỉ là về việc sử dụng tương tác của psql. Nó không phải là một bản sao của những câu hỏi của những người không hài lòng với tiêu chuẩn sql và những người muốn thực hiện một cái gì đó như "select * -foo".


3
Không có ai, xin lỗi. Bạn có thể truy vấn information_schemathông qua hàm pl / pssql để tạo danh sách khá dễ dàng, nhưng theo cách đó, đó sẽ là hai truy vấn.
Craig Ringer

2
Hầu hết các công cụ GUI có thể làm điều đó. Nhưng nếu bạn muốn (hoặc phải) dính vào dòng lệnh, có thể điều này sẽ giúp: github.com/dbcli/pgcli
a_horse_with_no_name

@a_horse_with_no_name Tôi muốn chấp nhận "câu trả lời" của bạn. Bạn có thể vui lòng gửi câu trả lời và giải thích việc sử dụng công cụ pgcli để giải quyết câu hỏi.
guettli

trừ cột nào? Cái cuối cùng? cái đầu tiên? Hay ngẫu nhiên?
BAE

1
@ChengchengPei: không có desclệnh nào trongpsql
a_horse_with_no_name

Câu trả lời:


4

Để có được danh sách các cột theo thứ tự mặc định, không có cột xấu:

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!

Hoặc chỉ WHERE attrelid = 'mytable'::regclasskhi bạn tin tưởng đường dẫn tìm kiếm để giải quyết đúng lược đồ.

quote_ident() thêm dấu ngoặc kép khi cần thiết.

Tôi đã hỏi câu hỏi tương tự vào năm 2007 trên pssql-general . Đó là Postgres 8.2 sau đó. Kỷ niệm ngọt ngào ...

Liên quan:


1
Nghe có vẻ như là một việc cần làm, để thêm lệnh dấu gạch chéo ngược vào psql, nó sẽ phát ra một chuỗi là danh sách tất cả các cột cho một bảng, được trích dẫn một cách thích hợp. Và bạn có thể bỏ qua bất kỳ cột nào được đưa vào làm đối số bổ sung cho lệnh. Vì vậy, giả thuyết \dq thetable bad_column.
jjanes

@jjanes: Tôi không chắc nó có thể tạo ra đủ nhu cầu để thuyết phục các nhà phát triển cốt lõi phân bổ thư miễn phí qcho nhiệm vụ. Có lẽ một lựa chọn chung cho cả gia đình các \dlệnh để hiển thị một danh sách trống các tên được nối? Giống như \d- tbl(mnemonic: ngược lại \d+, cho thấy nhiều chi tiết hơn ). Điều này về cơ bản sẽ cho phép có được bất kỳ danh sách đối tượng trần. Các bảng trong một lược đồ : \dt- public.*, các hàm bắt đầu bằng "f_foo": \df- f_foo*vv - hoặc các cột trong bảng : \d- mytbl. Tương tự như những gì lệnh shell lsthực hiện ...
Erwin Brandstetter

Tôi cho bạn tiền thưởng. Nhưng một cái gì đó tích hợp vào psql sẽ thực sự là một tính năng hay. Cảm ơn bạn Erwin :-)
guettli

0

Tôi nghĩ rằng tôi đã tìm thấy những gì bạn đang tìm kiếm nhưng tôi đã không tự mình kiểm tra nó.

Có một phần mềm tên là SequelPro cho phép bạn chọn các trường từ một bảng nhất định nhưng chỉ dành cho MySQL. Vui lòng đọc từ bên dưới từ một nơi nào đó ở giữa trang:

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

Có một phần mềm khác tên là PSequel chỉ chạy trên Mac và nó tuyên bố nó thuộc loại SequelPro được xây dựng cho Postgres:

http://www.pributionel.com/

Hi vọng điêu nay co ich.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.