我想强制一个表的自动增量字段的一些值,我尝试了这样:
ALTER TABLE product AUTO_INCREMENT = 1453
AND
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
我有一个表产品与Id和名称字段
我想强制一个表的自动增量字段的一些值,我尝试了这样:
ALTER TABLE product AUTO_INCREMENT = 1453
AND
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
我有一个表产品与Id和名称字段
当前回答
如果你想从GUI重置自动增量,那么按照这个步骤。
进入数据库 点击公共 在表格列表页面,你可以看到像“表”,“视图”,“序列”这样的标签。 点击序列 当你点击“序列”,你可以看到所有的序列列表,点击任何你想重置 之后,你可以看到多种选择,如“改变”,“设置值”,“重新启动”,“重置”等… 然后点击重置,然后添加一个新行。
其他回答
节点脚本:修复所有表identity: auto-increment / nextval,基于上次插入它。
const pg = require('pg');
const { Client } = pg;
const updateTables = async () => {
const client = new Client({
user: 'postgres',
host: 'localhost',
database: 'my-database',
password: 'postgres',
port: 5432,
});
await client.connect();
console.log('Connected');
const execQuery = async (queryStr, params = []) => {
return new Promise((resolve, reject) => {
client.query(queryStr, params, (error, results) => {
if (error) {
reject(error);
} else {
resolve(results);
}
})
})
}
const tablesRes = await execQuery(`
SELECT table_name
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='public';
`)
const tables = tablesRes.rows.map(row => row.table_name);
tables.map(async tableName => {
let lastId;
try {
const res = await execQuery(`SELECT id from "${tableName}" ORDER BY id DESC LIMIT 1`);
lastId = res.rows[0].id;
} catch (e) {}
if (lastId) {
const nextId = lastId + 1;
const queryStr = `ALTER SEQUENCE ${tableName}_id_seq RESTART WITH ${nextId}`;
await execQuery(queryStr);
console.log(tableName, queryStr);
}
})
};
updateTables();
-- Change the starting value of the sequence
ALTER SEQUENCE project_id_seq RESTART 3000;
相同但充满活力:
SELECT SETVAL('project_id_seq', (SELECT MAX(id) FROM project));
SELECT的使用很奇怪,但它有效。
来源: https://kylewbanks.com/blog/Adding-or-Modifying-a-PostgreSQL-Sequence-Auto-Increment
编辑:删除+1建议在评论
2021年Postgres 11.12
ALTER SEQUENCE没有为我工作,它以某种方式将其重置为null。 对我有用的是:
SELECT setval('<table>_<column>_seq', 5);
如果你有一个带有IDENTITY列的表,你想要重置下一个值,你可以使用以下命令:
ALTER TABLE <table name>
ALTER COLUMN <column name>
RESTART WITH <new value to restart with>;
获取序列id使用
SELECT pg_get_serial_sequence('tableName', 'ColumnName');
这将为您提供序列id tableName_ColumnName_seq
要获得最后的种子数量使用
select currval(pg_get_serial_sequence('tableName', 'ColumnName'));
或者如果你知道序列id已经直接使用它。
select currval(tableName_ColumnName_seq);
它会告诉你最后的种子号
重置种子数量使用
ALTER SEQUENCE tableName_ColumnName_seq RESTART WITH 45