Как изменить порядок колонок, чтобы не нарушить импорт с помощью pg_restore
Я пытаюсь экспортировать данные из живой БД Postgres в локальную БД Postgres и использовал pg_dump
(через DataGrip) для дампа базы данных в tar-файл. Я использую опцию INSERT из диалога DataGrip, которая дает следующее.
--dbname="XXX" --format=t --file="XXX/DataGrip Backup/{timestamp}" --inserts
Когда я пытаюсь импортировать tar-файл с помощью pg_restore
(снова через DataGrip), одна из моих таблиц (самая важная!) не импортируется
Ошибка, которую я получаю:
pg_restore: error: could not execute query: ERROR: неверный синтаксис ввода для типа numeric: "AUD"
В таблице есть числовое поле и поле varchar. Одно для скидки, другое для используемой валюты.
Это из модели (Django), использующей MoneyField:
coupon_discount = MoneyField(
decimal_places=2, max_digits=10, null=True, default_currency="AUD", default=0.00
)
Примером данных, которые я импортирую, является:
Command was: INSERT INTO public.customers_customer VALUES (2557, '', NULL, 3, NULL, NULL, NULL, NULL, '2022-08-14 08:45:50.466306+00', '2022-08-14 08:45:50.466454+00', '2022-08-14 08:45:50.466459+00', 2559, '90h0nbJgDU', 0, 0.00, 'AUD', false, false, NULL, 1);
pg_restore: error: could not execute query: ERROR: invalid input syntax for type numeric: "AUD"
LINE 1: ...10:31:35.347403+00', 2560, 'o4VxTmqlOa', 0, 0.00, 'AUD', fal...
Когда я смотрю на внешнюю БД Postgres, порядок двух полей в таблице следующий:
Я предполагаю, что это порядок, в котором поля указаны в поле tar. Но когда я проверяю локальную БД, порядок другой:
Я не думаю, что я сделал что-то для того, чтобы это было так, поскольку Django создает таблицы и поэтому я предполагаю порядок?
Есть ли способ изменить это, чтобы данные импортировались?
Нужно ли мне экспортировать данные другим способом? Я действительно просто хочу, чтобы фактические данные были импортированы. Кажется, мне уже приходится использовать --ignore-triggers
где-то, чтобы остановить целый ряд проблем с таблицами миграции и другими.
Заранее спасибо за все, чем вы можете мне помочь.
Используйте опцию --column-inserts
(вместо --inserts
) для pg_dump.
Это создаст операторы INSERT, которые будут квалифицировать целевые столбцы.