更新列详细信息时PostgreSQL Squence不工作

更新列详细信息时PostgreSQL Squence不工作,postgresql,database-sequence,Postgresql,Database Sequence,我创建了一个函数,使用Sequence nextval()函数更新postgresSQL表中的一列 BEGIN EXECUTE 'CREATE SEQUENCE '|| sequence_name || ' START 1'; EXECUTE 'UPDATE ' ||selected_table_name|| ' SET record_id = '||nextval(sequence_name); RETURN 'SUCCESS'; END; SELECT stagin

我创建了一个函数,使用Sequence nextval()函数更新postgresSQL表中的一列

BEGIN
    EXECUTE 'CREATE SEQUENCE '|| sequence_name || ' START 1';
    EXECUTE 'UPDATE ' ||selected_table_name|| ' SET record_id = '||nextval(sequence_name);
    RETURN 'SUCCESS';
END;
SELECT staging.update_record_id('staging.test_table','staging.sq_test_table');
BEGIN
    EXECUTE 'CREATE SEQUENCE '|| sequence_name || ' START 1';
    EXECUTE 'UPDATE ' ||selected_table_name|| ' SET record_id = nextval('''||sequence_name||''')';
    RETURN 'SUCCESS';
END;
但当我调用如下函数时

BEGIN
    EXECUTE 'CREATE SEQUENCE '|| sequence_name || ' START 1';
    EXECUTE 'UPDATE ' ||selected_table_name|| ' SET record_id = '||nextval(sequence_name);
    RETURN 'SUCCESS';
END;
SELECT staging.update_record_id('staging.test_table','staging.sq_test_table');
BEGIN
    EXECUTE 'CREATE SEQUENCE '|| sequence_name || ' START 1';
    EXECUTE 'UPDATE ' ||selected_table_name|| ' SET record_id = nextval('''||sequence_name||''')';
    RETURN 'SUCCESS';
END;
它将所有记录的相关列更新为1。但是,当我直接在控制台中使用以下命令时,它将以增量更新所有值。控制台代码如下所示

update staging.test_table set record_id = nextval('staging.sq_test_table');

如果任何人都能对此给出解决方案,我将不胜感激

我找到了问题的解决方案。函数体应更改如下

BEGIN
    EXECUTE 'CREATE SEQUENCE '|| sequence_name || ' START 1';
    EXECUTE 'UPDATE ' ||selected_table_name|| ' SET record_id = '||nextval(sequence_name);
    RETURN 'SUCCESS';
END;
SELECT staging.update_record_id('staging.test_table','staging.sq_test_table');
BEGIN
    EXECUTE 'CREATE SEQUENCE '|| sequence_name || ' START 1';
    EXECUTE 'UPDATE ' ||selected_table_name|| ' SET record_id = nextval('''||sequence_name||''')';
    RETURN 'SUCCESS';
END;

在您的问题中,您将一个字符串与序列(1)的当前值连接起来。这就是为什么所有值都是1。在您的回答中,您让引擎为每一行调用nextval。@谢谢您的解释