Получающий столбец имеет тип jsonb [], но выражение имеет тип text [] при попытке вставить с помощью psycopg2 - PullRequest
0 голосов
/ 02 мая 2019

Я использую execute_values для вставки содержимого многих таблиц в другие таблицы, я уже установил адаптер dict на json, когда получил другую ошибку, однако я не знаю, как это исправить один:

psycopg2.ProgrammingError: столбец "rules" имеет тип jsonb [], но выражение имеет тип text [] ЛИНИЯ 1: ... UES (1, 'tturxvrtgvvsrqgzsedcoyqujakyepjordrbbjdw', ARRAY ['{"i ...

Единственный способ справиться с этим - что-то вроде этой проблемы , но мне нужно будет обработать каждый столбец ...

Может быть, есть способы создать новый адаптер, но я не смог добиться того, как это сделать с помощью документов.

register_adapter(dict, Json)

execute_values(
            dest_cursor,
            f'''
            INSERT INTO {t} VALUES %s ON CONFLICT DO NOTHING;
            ''',
            records,
    )

Существует ли автоматический способ справиться с этим, например register_adapter?

1 Ответ

1 голос
/ 02 мая 2019

Я нашел ответ по этой проблеме Я узнал, что могу использовать параметр template, например:

execute_values(
  dest_cursor,
  f'''
  INSERT INTO {t} VALUES %s ON CONFLICT DO NOTHING;
  ''',
  records,
  template="(%s, %s, %s::jsonb[], %s, %s)" # as many placeholders requested
)
...