2017-06-16 125 views
0

我正在使用Django框架。 對於每個模型,django使用唯一的id和序列生成關係。如何選擇postgresql中所有序列的所有ID?

例如爲:

關係: myapp__mymodel_a myapp__mymodel_b myapp__mymodel_c

序列: myapp__mymodel_a__id_seq myapp__mymodel_b__id_seq myapp__mymodel_c__id_seq

每個關係有一個獨特的領域 「ID」。 每個id字段都有一個對應的序列,其中有一個字段「last_value」。

現在我需要一個SQL命令來獲取所有序列的last_values,並以「_id_seq」結尾。

+0

爲什麼你需要從序列LAST_VALUE?你可以從表中得到last_value – Exprator

回答

0
t=# do 
$$ 
declare 
_r record; 
_t text; 
begin 
for _r in (select relname,relnamespace::regnamespace from pg_class where relname like '%_id_seq') loop 
    execute format('select last_value from %I.%I',_r.relnamespace,_r.relname) into _t; 
    raise info '%', 'seq: '||_r.relname||', last_value: '||_t; 
end loop; 
end; 
$$ 
; 
INFO: seq: test_table_id_seq, last_value: 3 
INFO: seq: json_test_id_seq, last_value: 4 
INFO: seq: test_a_id_seq, last_value: 1 
INFO: seq: customer_id_seq, last_value: 4 
INFO: seq: customerstatus_recordid_seq, last_value: 8 
INFO: seq: customerstatus_id_seq, last_value: 1 
INFO: seq: t1_id_seq, last_value: 16 
INFO: seq: s100_serial_id_seq, last_value: 8 
INFO: seq: t2_id_seq, last_value: 4 
DO 

也與未來10,there will be pg_sequence

regnamespace帶有9.5以前的版本加入對pg_namespace.oid

+0

Thx Vao Tsun! 只需稍作更改,此代碼適用於我。 隨着你的版本我: 'code'ERROR:42704:鍵入 「regnamespace」 不存在 'code'LINE 1:(從pg_class裏的wh選擇relname,relnamespace :: regnamespace ... 'code'^ 對我來說,我刪除了regnamespace並且一切正常! – Morpheus

+0

yes - 更新了答案以反映這一點。謝謝 –