PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Filter nama kolom dari tabel yang ada untuk pernyataan SQL DDL

Bangun perintah DDL secara dinamis. Anda dapat melakukannya dalam dua langkah:

  1. Membuat pernyataan:

    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. (Periksa apakah sudah baik!) Kemudian jalankan pernyataan yang dihasilkan dalam perjalanan putaran kedua ke server.

Ini didasarkan pada tampilan skema informasi information_schema.columns . Atau, Anda dapat menggunakan pg_catalog.pg_attribute . Terkait:

Tapi itu bisa dilakukan dalam satu perjalanan pulang pergi ke server juga:

Dengan DO pernyataan dari klien mana pun

DO hanyalah pembungkus sederhana untuk eksekusi ad-hoc kode PL/pgSQL. Anda mungkin melakukan hal yang sama dalam suatu fungsi atau prosedur.

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
$$;

Lebih sederhana dengan psql meta-command \gexec

Karena Anda menyebutkan terminal interaktif default psql . Di sana Anda dapat menggunakan \gexec . Itu ...

Jadi:

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 Tidak Ada fungsi Peningkatan Otomatis?

  2. Fungsi PostgreSQL untuk beralih melalui/bertindak pada banyak baris dengan status

  3. Masukkan data dan atur kunci asing dengan Postgres

  4. Validasi Django IntegerRangeField gagal

  5. Bagaimana Anda menggabungkan dua tabel pada bidang kunci asing menggunakan Django ORM?