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

Лично я установил «правило», прикрепленное к инструкции insert. Скажем, у вас была таблица «dns», в которой каждый раз записывались удары DNS для каждого клиента:

CREATE TABLE dns (
    "time" timestamp without time zone NOT NULL,
    customer_id integer NOT NULL,
    hits integer
);

Вы хотели иметь возможность повторно вставлять строки с обновленными значениями или создавать их, если они не было уже. Ключ к customer_id и времени. Что-то вроде этого:

CREATE RULE replace_dns AS 
    ON INSERT TO dns 
    WHERE (EXISTS (SELECT 1 FROM dns WHERE ((dns."time" = new."time") 
            AND (dns.customer_id = new.customer_id)))) 
    DO INSTEAD UPDATE dns 
        SET hits = new.hits 
        WHERE ((dns."time" = new."time") AND (dns.customer_id = new.customer_id));

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

Однако, если есть много вложений, которые все время происходят, вам нужно будет заблокировать стол вокруг операторов вставки: Блокировка SHARE ROW EXCLUSIVE предотвратит любые операции, которые могут вставлять, удалять или обновлять строки в целевой таблице. Тем не менее, обновления, которые не обновляют уникальный ключ, безопасны, поэтому, если вы не выполните никаких действий, используйте вместо этого контрольные блокировки.

Кроме того, команда COPY не использует ПРАВИЛА, поэтому, если вы вставляете с COPY, вам нужно будет использовать триггеры.

0
задан Littlefoot 25 March 2019 в 15:27
поделиться

1 ответ

На значение столбца ссылаются хэши, например, #STUDENT_ID#.

Посмотрите, что написал Джеки Макилрой: « Удалить строку отчета с помощью динамического действия » ( https://jackiemcilroy.blogspot.com/2018/03/delete- row-of-report-with-dynamic-action.html ). Она описывает процесс подробно, с большим количеством скриншотов. Надеюсь, это поможет вам сделать то, что вы делаете.


На вашем месте я бы сделал одно из следующих действий:

  • использовать интерактивный отчет с формой (и перейти к форме, чтобы удалить строку) [ 114]
  • если бы это был табличный макет, я бы попробовал
    • старую табличную форму
    • новую интерактивную сетку

Я не думаю, что удаляю строки из интерактивного отчета (но хорошо, это только я, и мои идеи обычно не слишком умны). [1111 ]

0
ответ дан Littlefoot 25 March 2019 в 15:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: