如何在 postgres 中将现有的 COLUMN 类型更改为 SERIAL?
How to change existing COLUMN type to SERIAL in postgres?
以下语句不起作用:
ALTER TABLE my_table
ALTER COLUMN column_id set default nextval('my_table_column_id_seq');
那么如何将id列改为自增呢?
错误:
null value in column \"column_id"\ violates non null constraint.
当我在没有 column_id 的情况下插入时会发生这种情况。我需要它是自动递增的。
Postgres 版本是 12.
我的插入:
INSERT INTO my_table (column2, column3)
VALUES ('rndmstring', 5);
您可以创建从现有值的最大值 +1 开始的序列 column_id :
CREATE SEQUENCE my_table_column_id_seq START WITH <MAX VALUE OF column_id+1>;
检查此查询后是否
SELECT 1
FROM my_table
HAVING COUNT(distinct column_id)=COUNT(column_id)
AND SUM(CASE WHEN column_id IS NULL THEN 0 ELSE 1 END)=
SUM(CASE WHEN column_id IS NULL THEN 1 ELSE 1 END);
returns 1 用于相关列值的非空和唯一性,然后使用您现有的命令
ALTER TABLE my_table
ALTER COLUMN column_id SET DEFAULT nextval('my_table_column_id_seq');
命令并确保 column_id 的所有现有值都是唯一的,然后发出:
ALTER TABLE my_table ADD PRIMARY KEY(column_id);
解决了这个问题。我在端点中将 id 设置为参数以创建新的 table。
所以不是这个 nodejs 端点:
exports.createMy_table = async (column_id, column2, column3) => {
try {
const result = await client.query(
"INSERT INTO my_table (column_id, column2, column3) VALUES (, ,
[column_id, column2, column3]
);
return result.rows;
} catch (err) {
throw new Error(err);
}
};
我创建没有id。
exports.createMy_table = async (column2, column3) => {
try {
const result = await client.query(
"INSERT INTO my_table (column2, column3) VALUES (, ,
[column2, column3]
);
return result.rows;
} catch (err) {
throw new Error(err);
}
};
以下语句不起作用:
ALTER TABLE my_table
ALTER COLUMN column_id set default nextval('my_table_column_id_seq');
那么如何将id列改为自增呢?
错误:
null value in column \"column_id"\ violates non null constraint.
当我在没有 column_id 的情况下插入时会发生这种情况。我需要它是自动递增的。 Postgres 版本是 12.
我的插入:
INSERT INTO my_table (column2, column3)
VALUES ('rndmstring', 5);
您可以创建从现有值的最大值 +1 开始的序列 column_id :
CREATE SEQUENCE my_table_column_id_seq START WITH <MAX VALUE OF column_id+1>;
检查此查询后是否
SELECT 1
FROM my_table
HAVING COUNT(distinct column_id)=COUNT(column_id)
AND SUM(CASE WHEN column_id IS NULL THEN 0 ELSE 1 END)=
SUM(CASE WHEN column_id IS NULL THEN 1 ELSE 1 END);
returns 1 用于相关列值的非空和唯一性,然后使用您现有的命令
ALTER TABLE my_table
ALTER COLUMN column_id SET DEFAULT nextval('my_table_column_id_seq');
命令并确保 column_id 的所有现有值都是唯一的,然后发出:
ALTER TABLE my_table ADD PRIMARY KEY(column_id);
解决了这个问题。我在端点中将 id 设置为参数以创建新的 table。
所以不是这个 nodejs 端点:
exports.createMy_table = async (column_id, column2, column3) => {
try {
const result = await client.query(
"INSERT INTO my_table (column_id, column2, column3) VALUES (, ,
[column_id, column2, column3]
);
return result.rows;
} catch (err) {
throw new Error(err);
}
};
我创建没有id。
exports.createMy_table = async (column2, column3) => {
try {
const result = await client.query(
"INSERT INTO my_table (column2, column3) VALUES (, ,
[column2, column3]
);
return result.rows;
} catch (err) {
throw new Error(err);
}
};