簡體   English   中英

Postgres從序列中提取多個將來的鍵

[英]Postgres pull multiple future keys from sequence

在Oracle中,我可以執行類似的操作來獲取一堆密鑰。

select seq.nextval from dual connect by level <= 1000;

我的Postgres有一個nextval函數,但是如何一次提取多個值呢?

如果有人也知道InnoDb的答案,我將很高興閱讀它。

PostgreSQL有一套操作序列函數 所以你可以做這樣的事情。 (但是不要。請參見下面的“使用PostgreSQL的本機緩存”。)

drop sequence test;
create sequence test;

-- You'll want to wrap these in a single transaction.
select nextval('test');                               -- Returns 1
select (setval('test', currval('test') + 1000)) as t; -- Returns 1001
select nextval('test');                               -- Returns 1002

還有其他幾種從序列中獲取一堆值的方法。 請參閱文檔CREATE SEQUENCE

使序列增加1000,而不是增加1。讓您的應用程序處理出比nextval()低的千個值。 您可能最終會丟掉很多數字。

drop sequence test;
create sequence test increment by 1000;
select nextval('test'); -- Returns 1; do this when you create the sequence.
select nextval('test'); -- Returns 1001

使用PostgreSQL的本地緩存 我很確定這將是最可靠,最可靠的方法。

drop sequence test;
create sequence test cache 1000;
select nextval('test'); -- Returns 1.
select nextval('test'); -- Returns 2 from the cache; doesn't touch the sequence.

不同的並發會話不會看到相同的東西。

select nextval('test'); -- Returns 1001

在postgresql中,您可以使用如下代碼:

select nextval('mysequence') from generate_series(1,1000);

從序列中獲取1000個值! 不過,我認為假設這些值是連續值並不是特別安全。 您可能需要將select包裝在lock語句中,以確保競爭結果不會交錯。 如果您不關心連續值,則不需要鎖定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM