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

Lọc tên cột từ bảng hiện có cho câu lệnh SQL DDL

Xây dựng động lệnh DDL. Bạn có thể thực hiện theo hai bước:

  1. Tuyên bố xây dựng:

    SELECT 'CREATE TABLE why.am_i_doing_this AS SELECT '
        || string_agg(column_name, ', ' ORDER BY ordinal_position)
        || ' FROM original.table'
    FROM   information_schema.columns
    WHERE  table_schema = 'original'
    AND    table_name = 'table'
    AND    column_name NOT IN ('column_1', 'column_2');
    
  2. (Kiểm tra xem nó tốt!) Sau đó, thực hiện câu lệnh đã tạo trong chuyến đi vòng thứ hai đến máy chủ.

Điều này dựa trên chế độ xem giản đồ thông tin information_schema.columns . Ngoài ra, bạn có thể sử dụng pg_catalog.pg_attribute . Có liên quan:

Nhưng nó cũng có thể được thực hiện trong một chuyến đi khứ hồi đến máy chủ:

Với DO tuyên bố từ bất kỳ khách hàng nào

DO chỉ là một trình bao bọc đơn giản để thực thi đặc biệt mã PL / pgSQL. Bạn có thể làm tương tự trong một hàm hoặc thủ tục.

DO
$$
BEGIN
   EXECUTE (
   SELECT 'CREATE TABLE why.am_i_doing_this AS SELECT '
       || string_agg(column_name, ', ' ORDER BY ordinal_position)
       || ' FROM original.table'
   FROM   information_schema.columns
   WHERE  table_schema = 'original'
   AND    table_name = 'table'
   AND    column_name NOT IN ('column_1', 'column_2')
   );
END
$$;

Đơn giản hơn với siêu lệnh psql \gexec

Vì bạn đã đề cập đến thiết bị đầu cuối tương tác mặc định psql . Ở đó, bạn có thể sử dụng \gexec . Nó ...

Vì vậy:

SELECT 'CREATE TABLE why.am_i_doing_this AS SELECT '
    || string_agg(column_name, ', ' ORDER BY ordinal_position)
    || ' FROM original.table'
FROM   information_schema.columns
WHERE  table_schema = 'original'
AND    table_name = 'table'
AND    column_name NOT IN ('column_1', 'column_2')\gexec



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgresql - bắt đầu trên mac - `pg_ctl` không hoạt động

  2. Không thể kết nối PostgreSQL với cơ sở dữ liệu từ xa bằng pgAdmin

  3. Hibernate:Chọn một cột chứa dữ liệu nhị phân không nên tải

  4. Ứng dụng Django trong vùng chứa Docker không thể tìm thấy postgres

  5. Cách so sánh hai lược đồ trong PostgreSQL