Как мне вставить Postgres DDL в CSV, который можно вставить в Google Sheets? - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь создать вывод из Postgres, который будет делать что-то вроде следующего:

schema, table, column, type, attributes
public, table1, id, bigserial, not null primary key
public, table1, name, string, not null
...

Пока вывод отформатирован с заголовками столбцов, я буду в порядке, если это не так CSV (я могу экспортировать обычный запрос как CSV просто отлично). У меня проблемы с наведением правильного запроса.

Самое близкое, что я получил, это следующее. Но мне кажется, что я на неправильном пути, и есть более простой / чистый способ сделать это. В настоящее время я также не получаю по одной строке на столбец таблицы (что я и хотел бы).

SELECT table_schema || ',' || table_name || ',' || 
    string_agg(column_list.column_expr, ';'  || '') || 
    '' || ');'
FROM (
  SELECT table_schema, table_name, ' ' || column_name || ',' || data_type || 
       coalesce('(' || character_maximum_length || ')', ', ') || 
       case when is_nullable = 'YES' then '' else ' NOT NULL' end as column_expr
  FROM information_schema.columns
  WHERE table_schema = 'public' 
  ORDER BY ordinal_position) column_list
  group by table_schema,table_name;

1 Ответ

0 голосов
/ 21 февраля 2020

Думаю, я немного обдумал это. Вот финал SQL, который я использовал в итоге:

SELECT table_schema, table_name, column_list.column_name, column_list.column_expr
FROM (
  SELECT table_schema, table_name, column_name, data_type || 
       coalesce('(' || character_maximum_length, ' ') || 
       case when is_nullable = 'YES' then '' else ' NOT NULL' end as column_expr
  FROM information_schema.columns
  WHERE table_schema = 'public' 
  ORDER BY table_name, column_name) column_list;
...