2010-07-16 45 views
24

Có cách nào để dễ dàng nhận được các loại cột của kết quả truy vấn không? Tôi đã đọc tài liệu về psql, nhưng tôi không nghĩ nó hỗ trợ điều đó. Lý tưởng nhất, tôi có thể nhận được một cái gì đó như:Hiển thị các loại cột kết quả truy vấn (PostgreSQL)

columna : text | columnb : integer 
----------------+------------------- 
oh hai   |    42 

Có cách nào tôi có thể nhận được thông tin này mà không cần mã hóa một cái gì đó không?

+0

Ha, tôi vừa hỏi câu hỏi này ngày hôm qua trong # postgresql (không có câu trả lời) –

+0

Tôi không nghĩ rằng 'psql' có thể hiển thị nó cho bạn trực tiếp. Nhưng nó khá dễ dàng để sửa đổi nó để làm như vậy. Có lẽ bạn có thể viết một thủ tục lưu trữ để mô phỏng điều này mặc dù. – Wolph

Trả lời

3

Tôi không nghĩ rằng bạn có thể in chính xác những gì bạn có trong mẫu, trừ khi bạn viết một thủ tục được lưu trữ cho nó.

Một cách để làm điều đó (hai "chọn"):

  1. create table my_table as select ...
  2. \d my_table
  3. select * from my_table
+0

Vâng, tôi chỉ cần các loại, không nhất thiết phải định dạng đó. Cảm ơn. –

+4

Điều này có vẻ khá kludy và bất tiện so với việc sử dụng 'pg_typeof()'. –

+3

@JayTaylor Tôi đồng ý. Cuộc đời là một chuyến đi. :-) –

37

Có thể nhận được bất kỳ loại cột kết quả truy vấn SELECT.

Ví dụ

Với truy vấn và kết quả sau, chúng ta hãy trả lời câu hỏi * "kiểu cột của all_ids là gì?" *

SELECT array_agg(distinct "id") "all_ids" FROM "auth_user"; 

       all_ids 
-------------------------------------------- 
{30,461577687337538580,471090357619135524} 
(1 row) 

Chúng ta cần một cơ chế để công bố các loại "all_ids".

Trên postgres mailing list archives Tôi đã tìm thấy tham chiếu đến hàm pg gốc được gọi là pg_typeof. sử dụng

Ví dụ:

SELECT pg_typeof(array_agg(distinct "id")) "all_ids" FROM "auth_user"; 

Output:

all_ids 
---------- 
bigint[] 
(1 row) 

Cheers!

Các vấn đề liên quan