Заполнение полей в существующих записях в postgresql с помощью ID записи, чтобы определить, куда


Сценарий

у меня есть база данных postgresql, содержащая список вариантов продукта, которая была заполнена автоматически, однако, без номеров деталей. Я экспортировал таблицу, чтобы запустить некоторые формулы для генерации номеров деталей для каждого варианта продукта. Это дало мне таблицу, содержащую соответствующий идентификатор записи и связанный номер детали.

чего я пытаюсь достичь

теперь, когда у меня есть моя таблица с информацией, которая отсутствует, как получить эту информацию обратно в таблицу postgresql?

пример данных из таблицы Postgresql [product_product]

   id   create_date       weight    default_code     product_templ_id   ...
    1   2016-12-15 18:57       0    000-000000-000                  1   ...
    2   2016-12-16 19:00       0    000-000000-000                  2   ...
    3   2016-12-16 20:42       0    000-000000-000                 31   ...
    4   2016-12-16 20:43       0    000-000000-000                 31   ...
    5   2016-12-16 20:44       0    000-000000-000                 31   ...
    6   2016-12-16 20:45       0                                   31   ...
  ...   ................     ...    ..............                 31   ...
 1603   2016-12-16 21:51       0                                   31   ...
 1604   2016-12-16 21:52       0                                   31   ...

список образца высчитанных номеров детали

  id  default_code  
   6  000-000000-000
 ...  ..............
1604  000-000000-000

что я пробовал

Ну, я настроил ODBC-соединение с базой данных, связав таблицу в MS Access 2010. Я отфильтровал до product_templ_id поле и сортировка по id, чтобы соответствовать тому, что у меня было в моей электронной таблице Excel. Затем я скопировал часть числа из default_code столбец и попытался вставить в начальной точке, но получил сообщение об ошибке о том, что я пытался вставить слишком много информации. Как я понял, Access пытался вставить содержимое буфера обмена в одну ячейку. Не то поведение, на которое я надеялся.

какой маршрут лучше?

этот конкретный продукт имеет 1440 вариантов, каждый со своим собственным номером детали и спецификацией. Я действительно не хочу тратить свое время на генерацию всех этих строк. Я всегда говорите людям, что данные-это данные, и вы можете делать с ними что угодно. Вопрос только в том, как это сделать.

--EDIT--

я могу экспортировать свою таблицу из pgAdmin, но по какой-то причине, когда я пытаюсь импортировать, ничего не происходит.

в результате я попробовал следующую команду:

COPY product_product (default_code) from '/csv/file/location/file.csv' CSV HEADER delimiter ';' null '/n';

в результате которых:

ERROR:  extra data after last expected column
CONTEXT:  COPY product_product, line 2: "203;000-000000-000"

я думаю, Хорошо, я упоминаю одно поле, но мой csv имеет два поля. Это потому, что я хочу убедиться импортированный default_code поле связано с соответствующей записью.

далее, я пробовал:

COPY product_product FROM '/csv/file/location/file.csv' CSV HEADER delimiter ';' null 'n';

в результате:

ERROR:  duplicate key value violates unique constraint "product_product_pkey"
DETAIL:  Key (id)=(2) already exists.

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

если бы я знал, как редактировать значение записи в postgresql, я мог бы написать скрипт для генерации необходимых команд для редактирования всех 1440 записей соответственно.

30
задан Sirach Matthews
28.12.2022 3:42 Количество просмотров материала 3068
Распечатать страницу

1 ответ

вы должны экспортировать данные в формате CSV, и использовать либо pgAdmin или команду raw COPY в postgres, чтобы импортировать данные обратно в:

посмотреть этот пост информацию о том, как это сделать: https://stackoverflow.com/questions/19400173/how-should-i-import-data-from-csv-into-a-postgres-table-using-pgadmin-3

-- EDIT--

после этот пост вы можете использовать свои навыки сценариев для создания следующего SQL запрос:

UPDATE product_product
    SET default_code = CASE id
        WHEN 6 THEN 000-000000-000
        ...
        ...
        WHEN 1603 THEN 000-000000-000
        WHEN 1604 THEN 000-000000-000
        ELSE default_code
        END;

затем с помощью pgAdmin подключитесь к базе данных и выполните запрос. Это будет анализировать записи в product_product таблица и обновить default_code поле записи, соответствующее относительному id значение. Если id значение не в вашем списке, он просто держит default_code значение.

этот пост завершает запрос дополнительным оператором:

        ...
        END
    WHERE id IN(6,...,...,1603,1604);

в данном случае перечислять не нужно специфический id значения. Кроме того,IN список из более чем 1440 значений вызовет ошибку. Это нормально, потому что ELSE default_code оператор действует как catchall, обработка id ценности не в нашем case список.

это решение было протестировано и проверено OP.

1
отвечен FrankerZ 2022-12-29 11:30

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

database
freebsd
microsoft-access-2010
microsoft-excel-2010
postgresql
Вверх