如果我理解SERIAL
正确键入,则如果没有为每个INSERT
语句指定值,则会自动递增。我想知道每组INSERT
甚至每笔交易是否可以自动增加一次。
E.g。如果我在每个插入后执行3次插入,我会在1,2,3
列中获得SERIAL
。我想创建具有3个插入的单个事务,并增加受行影响的行,最后在1,1,1
列中为这些行添加SERIAL
。如果我再次这样做,我会2,2,2
而不是4,5,6
答案 0 :(得分:0)
您可以使用@a_horse_with_no_name描述的序列,并使用提供默认值的函数自动执行该过程。在事务中多次调用时,将返回相同的值。
CREATE SEQUENCE test_id_seq;
CREATE FUNCTION test_id_nextval() RETURNS INTEGER AS $$
DECLARE
retval INTEGER;
BEGIN
-- Try to fetch the current value.
SELECT * FROM test_id_seq_temp LIMIT 1 INTO STRICT retval;
RETURN retval;
EXCEPTION
WHEN undefined_table THEN
-- The function hadn't been called yet during this transaction.
-- Create a temporary table for the next value of the sequence and return it.
CREATE TEMPORARY TABLE test_id_seq_temp ON COMMIT DROP AS SELECT nextval('test_id_seq');
SELECT * FROM test_id_seq_temp LIMIT 1 INTO STRICT retval;
RETURN retval;
END;
$$ VOLATILE LANGUAGE plpgsql;
CREATE TABLE test (id INTEGER DEFAULT test_id_nextval());