PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Filtruj nazwy kolumn z istniejącej tabeli dla instrukcji SQL DDL

Dynamicznie kompiluj polecenie DDL. Możesz to zrobić w dwóch krokach:

  1. Oświadczenie o kompilacji:

    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. (Sprawdź, czy jest dobrze!) Następnie wykonaj wygenerowaną instrukcję podczas drugiej podróży w obie strony do serwera.

Jest to oparte na widoku schematu informacyjnego information_schema.columns . Alternatywnie możesz użyć pg_catalog.pg_attribute . Powiązane:

Ale można to również zrobić podczas jednej podróży w obie strony na serwer:

Z DO oświadczenie od dowolnego klienta

DO jest po prostu prostym opakowaniem do wykonywania ad-hoc kodu PL/pgSQL. Możesz zrobić to samo w funkcji lub procedurze.

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

Prostsze z metakomendą psql \gexec

Ponieważ wspomniałeś o domyślnym terminalu interaktywnym psql . Tam możesz użyć \gexec . To ...

A więc:

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. Jak zwrócić listę dostępnych sortowań w PostgreSQL

  2. Wyświetlaj nazwę kolumny z maksymalną wartością między kilkoma kolumnami

  3. PostgreSQL użyj wartości z poprzedniego wiersza, jeśli jej brakuje

  4. Oracle do PostgreSQL — kursory i wspólne wyrażenia tabelowe

  5. Instalacja PL/Ruby dla PostgreSQL 8.3