172 похожих чатов

Триггер я уже создал, просто если будет будет пару миллиардов

записей, не будет ли это тормозить вставку?

12 ответов

7 просмотров

Так этот Ваш триггер никто тут не видел — нам-то откуда знать?! ;)

Сергей- Автор вопроса
Yaroslav Schekin
Так этот Ваш триггер никто тут не видел — нам-то о...

там ничего такого нет CREATE OR REPLACE FUNCTION check_unique_transaction() RETURNS trigger AS $$ BEGIN IF EXISTS (SELECT 1 FROM transactions WHERE account_id = NEW.account_id AND currency_id = NEW.currency_id AND transaction_hash = NEW.transaction_hash) THEN RAISE EXCEPTION 'Duplicate transaction'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql;

Будет тормозить, скорее всего (по мере роста (числа) partitions), и особенно — если в каких-то нет индекса по этому условию. На всякий случай — Вы знаете, что так написанные проверки надёжно работают только на SERIALIZABLE?

Сергей- Автор вопроса
Yaroslav Schekin
Будет тормозить, скорее всего (по мере роста (числ...

> … что так написанные проверки … тут про наличие подзапросов вообще? или же про конструкцию EXISTS как частный случай? ( недавно именно EXISTS обсуждали, но думается, что любые подзапросы будут “стрелять” )

Виктор Егоров
> … что так написанные проверки … тут про наличие...

Нет, про то, что здесь вообще нет ничего (точки сериализации для низких уровней изоляции), что гарантировало бы надёжность этого даже при параллельном исполнении двух подобных запросов. Т.е. на RC/RR дубликаты будут вставляться вообще запросто (даже при наличии в каждой partition UNIQUE INDEX ON this_partition(account_id, currency_id, transaction_hash) тоже могут, но с гораздо меньшей вероятностью на практике, конечно).

Если там будет меньшэ 30 миллиардов записей – то прекратите мучать партицыонирование, это всё сложно, медленно и некрасиво.

Сергей- Автор вопроса
Ilya Anfimov
Если там будет меньшэ 30 миллиардов записей – то ...

у меня есть таблица в которой чуть больше 1 миллиарда записей, я хочу получить первые записи по каждой валюте, запрос уже выполняется более 20 минут SELECT DISTINCT ON (currency_id) * FROM records ORDER BY currency_id, datetime; select * from (select *, row_number() over (PARTITION BY currency_id order by datetime) as row from records) as t1 where row = 1; пробовал вот так вот, а вы говорите о 30 миллиардах)

Сергей
у меня есть таблица в которой чуть больше 1 миллиа...

Для начала разговора о скорости запросов приведите всю информацыю из закрепа: https://t.me/pgsql/303899 Можно воспользоваться вот этим скриптом: https://t.me/pgsql/476688 Без этой информацыи такой разговор будет беспредметным.

Сергей
у меня есть таблица в которой чуть больше 1 миллиа...

О, неужели опять https://t.me/pgsql/491548 ? > пробовал вот так вот, а вы говорите о 30 миллиардах) Может, не надо "пробовать так", а стоит написать адекватный запрос / создать подходящие индексы? ;) Впрочем, Вам уже написали, что нужно показать, если хотите помощи...

Сергей
у меня есть таблица в которой чуть больше 1 миллиа...

в запросе выбирается вся строка? так не удивительно, их нужно все вычитать, отсортировать и на это нужно время.

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

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Карта сайта