Интересная проблема вылезла Pg 9.5.7

Поиск
Список
Период
Сортировка
От Dmitry E. Oboukhov
Тема Интересная проблема вылезла Pg 9.5.7
Дата
Msg-id 20180423155636.25gn66rl4cbrun4g@vdsl.uvw.ru
обсуждение исходный текст
Список pgsql-ru-general
Была база заказов и в ней вот такой запрос:


UPDATE
    "orders" "o"
SET

    "finish_time"   = NOW(),
    ("finish_longitude", "finish_latitude") = (
        SELECT
            ("d"."lp"->>'longitude')::NUMERIC(9,6)  AS "finish_longitude",
            ("d"."lp"->>'latitude')::NUMERIC(9,6)   AS "finish_latitude"
        FROM
            "drivers" "d"
        WHERE
            "d"."id" = "o"."did"
    ),

    "status" = 'complete'
WHERE
    "id" = '77587611'
RETURNING
  *

Есть некая возня: из другой таблички берем lon/lat и кладем в заказы.

Все работало нормально, хотя синтаксис относительно некрасивый.

Далее работаем над тем чтобы включить партицирование.

Что сделали

1. создали новую таблицу
    CREATE TABLE "porders" (LIKE "orders" INCLUDING ALL);
2. Проставили что orders теперь является inherit от porders
3. затем переименовали таблицы
    orders -> history
    porders -> orders
4. Некоторую часть заказов перенесли из history в orders запросами
вида
    WITH
        "o" AS (
            DELETE FROM "history" WHERE "id" > $1
        )
    INSERT INTO "orders" SELECT "o";


Что имеется: имеется дохрелион тестов которые тестируют каждый SQL
запрос на тестовой базе, и они все прошли. Тест данного запроса так же
нормально проходит.

Сделали апгрейд боевой БД и данный запрос стал сыпаться с ошибкой:

ERROR:  attribute 82 has wrong type
Table has type text, but query expects integer.

Экспериментальным путем вычислили что проблема вот в этом блоке:

    ("finish_longitude", "finish_latitude") = (
        SELECT
            ("d"."lp"->>'longitude')::NUMERIC(9,6)  AS "finish_longitude",
            ("d"."lp"->>'latitude')::NUMERIC(9,6)   AS "finish_latitude"
        FROM
            "drivers" "d"
        WHERE
            "d"."id" = "o"."did"
    ),

Значения finish_longitude и finish_latitude получаются 37.871355 и
55.751878.

В интернетах гуглил и чет ничего не нагуглил. Запрос пока переписали
на perl'овой стороне (то есть убрали подзапрос).

Медитирую но пока не могу понять как на такую проблему нарвались. Есть
подозрение что падает на записях которые переносили из history в
orders но пока не проверил с новыми записями.

Есть идеи как это посмотреть?
--

. ''`.            Dmitry E. Oboukhov <unera@debian.org>
: :’  :
`. `~’               GPG key: 4096R/08EEA756 2014-08-30
  `- 71ED ACFC 6801 0DD9 1AD1  9B86 8D1F 969A 08EE A756

Вложения

В списке pgsql-ru-general по дате отправления:

Предыдущее
От: "Dmitry E. Oboukhov"
Дата:
Сообщение: Re: Настройка psql
Следующее
От: Dmitry Igrishin
Дата:
Сообщение: Новый C++ API для PostgreSQL.