Size: a a a

pgsql – PostgreSQL

2020 July 19

НХ

Никита Хмелев... in pgsql – PostgreSQL
Коллеги, есть какой нибудь способ получить красивую схему базы данных из существующей базы данных, или из скрипта?
источник

VS

Vladimir Skilyazhnev in pgsql – PostgreSQL
схема т.е набор ddl или схема например в idef1x?
источник

НХ

Никита Хмелев... in pgsql – PostgreSQL
ER диаграмма
источник

НХ

Никита Хмелев... in pgsql – PostgreSQL
Что то вот такое
источник

V

Valery in pgsql – PostgreSQL
PowerArchitect если правильно помню название
источник

AS

Artem Silenkov in pgsql – PostgreSQL
Спс!
источник

V

Valery in pgsql – PostgreSQL
источник
2020 July 20

S

Stan in pgsql – PostgreSQL
Нужно написать запрос для PostgreSQL 12 типа:
copy subscriptions (
   id, --sequence
   uuid, --есть в файле
   timezone, --результат подзапроса
   language, --есть в файле
   is_test, --нет в файле, должно быть false
   created_at, --есть в файле
   updated_at, --TIMESTAMP должно быть NOW()
   deleted_at --должно принимать значение null или колонки last_ative из файла при условии, что колонка @invalid_identifier в файле равна "t"
) from '/temp/test.csv' with delimiter as ','


Не могу понять как дать "имена" колонкам в исходном .csv и можно ли в copy использовать case when, подзапросы и т.д. Можно ли вообще так сделать с Postgres?


В качестве примера - вот рабочая версия этого запроса для MySQL:
LOAD DATA LOCAL INFILE '/temp/test.csv' IGNORE INTO TABLE subscriptions COLUMNS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES (
   @id,
   @language,
   @unused_1
   @unused_2
   @unused_3
   @created_at,
   @last_active
   @invalid_identifier,
) SET
   id = null,
   uuid = @id,
   timezone = (SELECT NAME FROM timezones WHERE OFFSET=@timezone LIMIT 1),
   language = @language,
   is_test = false,
   created_at = @created_at,
   updated_at = NOW(),
   deleted_at = CASE
       WHEN @invalid_identifier = 't' THEN @last_active
       ELSE null
   END


Кто может помочь?
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Stan
Нужно написать запрос для PostgreSQL 12 типа:
copy subscriptions (
   id, --sequence
   uuid, --есть в файле
   timezone, --результат подзапроса
   language, --есть в файле
   is_test, --нет в файле, должно быть false
   created_at, --есть в файле
   updated_at, --TIMESTAMP должно быть NOW()
   deleted_at --должно принимать значение null или колонки last_ative из файла при условии, что колонка @invalid_identifier в файле равна "t"
) from '/temp/test.csv' with delimiter as ','


Не могу понять как дать "имена" колонкам в исходном .csv и можно ли в copy использовать case when, подзапросы и т.д. Можно ли вообще так сделать с Postgres?


В качестве примера - вот рабочая версия этого запроса для MySQL:
LOAD DATA LOCAL INFILE '/temp/test.csv' IGNORE INTO TABLE subscriptions COLUMNS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES (
   @id,
   @language,
   @unused_1
   @unused_2
   @unused_3
   @created_at,
   @last_active
   @invalid_identifier,
) SET
   id = null,
   uuid = @id,
   timezone = (SELECT NAME FROM timezones WHERE OFFSET=@timezone LIMIT 1),
   language = @language,
   is_test = false,
   created_at = @created_at,
   updated_at = NOW(),
   deleted_at = CASE
       WHEN @invalid_identifier = 't' THEN @last_active
       ELSE null
   END


Кто может помочь?
> MySQL

А причём тут PostgreSQL?
источник

S

Stan in pgsql – PostgreSQL
Михаил Шурутов
> MySQL

А причём тут PostgreSQL?
Запрос MySQL для примера. Нужен такой для постргрес. В моем сообщении это написано.
источник

S

Stan in pgsql – PostgreSQL
Возможно, стоит поменять местами :)
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Stan
Возможно, стоит поменять местами :)
Сразу указать, что нужен такой же для ПГ, а то вот я спросонья не увидел, прошу прощения.
источник

S

Stan in pgsql – PostgreSQL
Михаил Шурутов
Сразу указать, что нужен такой же для ПГ, а то вот я спросонья не увидел, прошу прощения.
да, все верно говорите, сейчас переделаю
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Докумертация нам говорит, что:
COPY имя_таблицы [ ( имя_столбца [, ...] ) ]
   FROM { 'имя_файла' | PROGRAM 'команда' | STDIN }
   [ [ WITH ] ( параметр [, ...] ) ]

Т.е. COPY (<list of columns>) FROM PROGRAM '<команда обработки CSV>' в вашем случае. И вся подготовка csv - снаружи. Либо по через file_fdw подключать этот csv, как таблицу и выгребать данные штатными средствами SQL.
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
либо через временную таблицу, в которую залить csv, как есть, а потом выковыривать данные.
источник

S

Stan in pgsql – PostgreSQL
Посмотрю, спасибо.
Всё усложняется тем, что база на удаленном сервере и использовать можно только`psql \copy`
источник

МШ

Михаил Шурутов... in pgsql – PostgreSQL
Stan
Посмотрю, спасибо.
Всё усложняется тем, что база на удаленном сервере и использовать можно только`psql \copy`
file_fdw, если есть полномочия в самой базе на CREATE EXTENSION file_fdw; или временная таблица, я лично других вариантов не вижу с указанным условием.
источник

S

Stan in pgsql – PostgreSQL
Если есть кто-то, кто может сделать - готов оплатить. Оригинальный запрос чуть больше того, что в примере, но не сильно.
источник

S

Stan in pgsql – PostgreSQL
Михаил Шурутов
file_fdw, если есть полномочия в самой базе на CREATE EXTENSION file_fdw; или временная таблица, я лично других вариантов не вижу с указанным условием.
Видимо, временная таблица. Т.к. есть подзапрос.
источник

S

Stan in pgsql – PostgreSQL
Сложность может быть в том, что в файле обычно содержится от 2 до 10, а иногда и больше, миллионов строк. Таких файлов может быть загружено с десяток в течение часа.
источник