Мне нужно контролировать числовые последовательности для файлов, которые будут продаваться между клиентами моей компании и их банками. Каждый банковский счет для каждого клиента имеет свою последовательность, и сегодня они управляют этим вручную. У меня была идея использовать PostgreSQL последовательности для выполнения работы.
В последовательности, связанной с полем таблицы (например, первичными ключами), можно вызвать nextval ()
из любого сеанса и получить следующий номер или currval ()
для текущего значения. Однако, когда я создал последовательность с помощью CREATE SEQUENCE
, не связывая ее с таблицей, я получил другое поведение. Каждый сеанс, вызывающий эти методы, получает результаты независимо друг от друга, и они сбрасываются по окончании сеанса, теряя текущее значение счетчика для этой конкретной последовательности.
После некоторого исследования я обнаружил этот вопрос это объясняет, что происходит. Очевидно, последовательности должны вести себя таким образом, обрабатывая результаты независимо для каждого сеанса, который их активирует, за исключением случаев, когда они связаны с полем таблицы, и в этом случае они ведут себя так, как я хочу, передавая последовательные результаты в нескольких сеансах.
И хотя в этом вопросе они давали простой ответ на проблему (создавали или изменяли таблицу, чтобы связать последовательность как последовательный первичный ключ), для меня это не практическое решение. В настоящее время у меня есть сотни банковских счетов в нескольких базах данных, с которыми можно связать последовательности, и это число, вероятно, вырастет до тысяч в этом году.
Есть ли способ указать последовательностям вести себя так, как будто они были связаны с таблицами, фактически не делая этого, или мне нужно создать таблицу специально для привязки этих последовательностей? Или, может быть, я ищу что-то еще для решения этой проблемы?
Заранее спасибо за любые мысли.
РЕДАКТИРОВАТЬ: в соответствии с просьбой a_horse_with_no_name, вот полная CREATE SEQUENCE
команда I ' m с использованием:
CREATE SEQUENCE IF NOT EXISTS company_X_account_Y_file_Z_seq;
X
, Y
и Z
изменяются в соответствии с балансовой единицей клиента, номером счета и файлом, которым управляют, соответственно. Я не использую никаких специальных команд, таких как CACHE
или что-либо еще.
Если это поможет, моя версия PostgreSQL будет 10.6.