[SQL] 간극없이 시퀀스를 생성 POSTGRESQL
SQL간극없이 시퀀스를 생성 POSTGRESQL
나는 / 송장에 대해 고유 한 ID를 만들 수 있어야합니다. 나는 테이블 ID와이 고유 번호에 대한 또 다른 열이. 나는 직렬화 격리 수준을 사용합니다. 사용
var seq = @"SELECT invoice_serial + 1 FROM invoice WHERE ""type""=@type ORDER BY invoice_serial DESC LIMIT 1";
그것은 직렬화 수준으로 정확한 값을 읽을 실 거예요에도 FOR UPDATE를 사용하기 때문에 도움이되지 않습니다.
유일한 해결책은 일부 재시도 코드를 삽입하는 것 같다.
해결법
-
==============================
1.시퀀스 숫자의 차이가없는 세트를 생성하지 않으며,이를 만드는 방법은 정말이 없기 때문에 롤백 또는 오류 것 "사용"일련 번호 그렇게.
시퀀스 숫자의 차이가없는 세트를 생성하지 않으며,이를 만드는 방법은 정말이 없기 때문에 롤백 또는 오류 것 "사용"일련 번호 그렇게.
나는 얼마 전에 이것을에 기사를 썼다. 그것은 오라클에 지시하지만 차이가없는 숫자의 기본 원칙에 대해 정말, 나는 같은 여기에 적용 생각합니다.
insert into invoices ( invoice#, ...) with curr as ( select Coalesce(Max(invoice#)) max_invoice# from invoices) select curr.max_invoice#+rownum, ... from tmp_invoice ...
원래 기사
-
==============================
2.당신도 삽입에 테이블을 잠금 및 / 또는 재시도 코드가 필요합니다. 사용 가능한 다른 옵션이 없습니다. 당신은 일어날 수있는 일에 대해 생각 중지하는 경우 :
당신도 삽입에 테이블을 잠금 및 / 또는 재시도 코드가 필요합니다. 사용 가능한 다른 옵션이 없습니다. 당신은 일어날 수있는 일에 대해 생각 중지하는 경우 :
그 이유를 확인할 수 있습니다.
-
==============================
3.그런 다음, 아니 캐시 시퀀스를 생성 순서에서 다음 값을 얻을하고 카운터로 있음을 사용할 수 있습니다.
그런 다음, 아니 캐시 시퀀스를 생성 순서에서 다음 값을 얻을하고 카운터로 있음을 사용할 수 있습니다.
CREATE SEQUENCE invoice_serial_seq START 101 CACHE 1; SELECT nextval('invoice_serial_seq');
여기에 더 많은 정보
-
==============================
4.2006 년에, 누군가가 PostgreSQL의 메일 링리스트에 끊김없는 시퀀스 솔루션을 게시 : http://www.postgresql.org/message-id/44E376F6.7010802@seaworthysys.com
2006 년에, 누군가가 PostgreSQL의 메일 링리스트에 끊김없는 시퀀스 솔루션을 게시 : http://www.postgresql.org/message-id/44E376F6.7010802@seaworthysys.com
from https://stackoverflow.com/questions/19004453/postgresql-generate-sequence-with-no-gap by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] T-SQL에서 피벗 데이터 (0) | 2020.04.27 |
---|---|
[SQL] 어떻게 Google BigQuery에서 범주의 수천 더미 변수 열을 만드는 방법? (0) | 2020.04.27 |
[SQL] - 기존 테이블에 삽입 테이블 또는 뷰가 존재하지 않습니다 ORA-00942가 예외를 얻기 (0) | 2020.04.27 |
[SQL] MySQL의 테이블 이름에 특수 문자 (0) | 2020.04.27 |
[SQL] MySQL은 / MariaDB - 내부 하위 쿼리에 의해 순서 (0) | 2020.04.27 |