PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cắt bớt hiển thị theo mặc định trong câu lệnh chọn psql postgres

Không có cách nào với các tùy chọn psql tích hợp sẵn mà tôi biết.
Bạn có thể đạt được mục tiêu của mình với một chức năng như @ Drazen đề xuất - chỉ đơn giản hơn nhiều :

CREATE OR REPLACE FUNCTION f_trunc_columns(_tbl anyelement, _len int = 25)
  RETURNS SETOF anyelement AS
$func$
DECLARE
   _typ  CONSTANT regtype[] := '{bpchar, varchar}';  -- types to shorten
BEGIN
   RETURN QUERY EXECUTE (
   SELECT format('SELECT %s FROM %s'
               , string_agg(CASE WHEN a.atttypid = 'text'::regtype  -- simple case text
                              THEN format('left(%I, %s)', a.attname, _len)
                            WHEN a.atttypid = ANY(_typ)             -- other short types
                              THEN format('left(%I::text, %s)::%s'
                                 , a.attname, _len, format_type(a.atttypid, a.atttypmod))
                            ELSE quote_ident(a.attname) END         -- rest
                          , ', ' ORDER BY a.attnum)
               , pg_typeof(_tbl))
   FROM   pg_attribute a
   WHERE  a.attrelid = pg_typeof(_tbl)::text::regclass
   AND    NOT a.attisdropped  -- no dropped (dead) columns
   AND    a.attnum > 0        -- no system columns
   );
END
$func$  LANGUAGE plpgsql;

Ví dụ về cuộc gọi:

SELECT * FROM f_trunc_columns(NULL::my_table);
SELECT * FROM f_trunc_columns(NULL::"MySchema"."My_funny_tbl", 11);

SQL Fiddle.

Ghi chú

  • Hoạt động cho bất kỳ bảng có các cột bất kỳ kiểu dữ liệu.

  • Điều này xây dựng và thực thi một truy vấn có dạng:

    SELECT "FoO_id", left(c_text, 11), left(c_vc, 11)::character varying
    FROM   "FoO";
    
  • Nó chỉ rút ngắn các cột của kiểu dữ liệu đã chọn và để lại những cột khác. Tôi đã bao gồm các kiểu ký tự cơ bản:
    bpchar là tên nội bộ của character và tất cả các biến thể.
    varchar tên nội bộ của ký tự character varying và tất cả các biến thể.
    Mở rộng theo nhu cầu của bạn.

  • Hàm trả về tên cột và kiểu dữ liệu ban đầu cho tất cả các cột. Tôi truyền các cột ngắn thành text trước khi đưa vào left() , trả về text , vì vậy text cột không cần đúc khác. Tất cả các kiểu rút gọn khác cần được đúc trở lại kiểu ban đầu. Một số loại bị hỏng nếu bạn cắt ngắn! Vì vậy, điều này không hoạt động cho tất cả các loại.

  • Bạn có thể thêm LIMIT n cho lệnh gọi hàm, nhưng có thể dễ dàng mở rộng hàm với LIMIT tích hợp sẵn - là nhiều hiệu quả hơn cho các bảng lớn, vì truy vấn bên trong hàm plpgsql được lập kế hoạch độc lập.

  • Hiệu suất không tệ hơn nhiều so với SELECT * FROM tbl đơn giản - ngoại trừ LIMIT đã nói trường hợp hoặc các trường hợp khác mà bạn lồng hàm. Các hàm PL / pgSQL đặt-trả về thường tốt nhất không được lồng vào nhau:

  • Tôi đã tạo trong một CPC tối đa mặc định. độ dài 25 ký tự, chuyển độ dài tùy chỉnh làm thông số thứ 2 hoặc điều chỉnh giá trị mặc định trong tiêu đề hàm theo nhu cầu của bạn.

  • Chức năng này an toàn trước các cuộc tấn công chèn SQL có thể xảy ra thông qua các mã nhận dạng được tạo thủ công độc hại.

Các câu trả lời có liên quan với nhiều giải thích và liên kết hơn:

pgAdmin

... có tính năng bạn đang yêu cầu, btw (cho tất cả các cột):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi:Không có mô-đun nào có tên psycopg2.extensions

  2. Các tùy chọn đa thai cho PostgreSQL

  3. Toán tử không tồn tại:integer =integer [] trong một truy vấn với BẤT KỲ

  4. Xóa phần tử khỏi mảng trong đối tượng JSONB

  5. LỖI:không thể truy cập tệp “$ libdir / plpython2” - LỖI:không thể truy cập tệp “$ libdir / plpython3”