[英]SQL SELECT statement to pull data from multiple tables with foreign keys and associative relationships
[英]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.