2017-06-16 70 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 - 更新了答案以反映这一点。谢谢 –