在 postgresql 中重置自动增量计数器
Posted
技术标签:
【中文标题】在 postgresql 中重置自动增量计数器【英文标题】:Reset auto increment counter in postgresql 【发布时间】:2017-04-30 22:13:54 【问题描述】:我想强制一个表的自增字段为某个值,不幸的是我的查询似乎失败了
ALTER SEQUENCE categories_categoryid_seq RESTART WITH 1;
ERROR: relation "your_sequence_name" does not exist
我的表categories
有以下列:
编辑:我的创建查询:
-- Table: public.categories
-- DROP TABLE public.categories;
CREATE TABLE public.categories
(
categoryid bigint NOT NULL,
functions character varying(255) COLLATE pg_catalog."default" NOT NULL,
name character varying(255) COLLATE pg_catalog."default" NOT NULL,
CONSTRAINT categories_pkey PRIMARY KEY (categoryid)
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public.categories
OWNER to postgres;
【问题讨论】:
你确定这是序列的名称吗?您是否使用 pgAdmin 或类似工具检查过它?如果没有,请尝试to check it with a query 添加架构... 是的,pgadmin 已打开。例如,以下查询完美运行:SELECT * FROM public.categories ORDER BY categoryid ASC 显然没有同名的序列。 edit 您的问题,并向我们展示categories
的完整 create table
语句和序列的create
语句。
列的定义没有默认值,也不是serial
。为什么你期望序列首先存在? (另外:将 varchar 限制为 255 个字符根本没有性能或存储优势。255 并不是能够加快处理速度的魔法限制)
【参考方案1】:
您可以验证DEFAULT
子句中定义的名称序列:
SELECT column_name, column_default
FROM information_schema.columns
WHERE table_schema = 'myschema'
AND table_name = 'categories'
ORDER BY ordinal_position;
然后你就知道要重置哪个序列了!
【讨论】:
使用以下查询:FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'categories' AND column_name LIKE 'categoryid' 我得到了结果:categoryid 但仍然......序列不正确 @user3657270 重要信息在column_default
列中。你在那里得到什么?【参考方案2】:
在上述问题中没有创建序列,因为您没有添加序列或序列:(根据脚本)。 bigint 必须是 bigserial 或 serial。
如果您想检查它,序列是否已创建或不运行此脚本。
Select column_default
from information_schema.columns
where table_name = 'categories' and column_name = 'categoryid';
【讨论】:
以上是关于在 postgresql 中重置自动增量计数器的主要内容,如果未能解决你的问题,请参考以下文章