PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Филтрирайте имена на колони от съществуваща таблица за SQL DDL израз

Създайте DDL командата динамично. Можете да го направите в две стъпки:

  1. Изявление за изграждане:

    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. (Проверете дали е добре!) След това изпълнете генерирания оператор във второ двупосочно пътуване до сървъра.

Това се основава на изгледа на информационната схема information_schema.columns . Като алтернатива можете да използвате pg_catalog.pg_attribute . Свързани:

Но може да се направи и с едно пътуване до сървъра:

С DO изявление от всеки клиент

DO е просто обвивка за ad-hoc изпълнение на PL/pgSQL код. Можете да направите същото във функция или процедура.

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

По-лесно с psql мета-команда \gexec

Тъй като споменахте интерактивния терминал по подразбиране psql . Там можете да използвате \gexec . Това...

И така:

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 на DigitalOcean

  2. psql код за връщане, ако са намерени нула редове

  3. JPA родната заявка връща Double или BigDecimal

  4. PostgreSQL:Времево клеймо в бъдещето

  5. Създаване на тест за разширение в postgresql