在 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 有以下列:

类别ID 功能 姓名

编辑:我的创建查询:

-- 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 中重置自动增量计数器的主要内容,如果未能解决你的问题,请参考以下文章

在脚本mysql中重置自动增量列值

mySQL 数据库:重置自动增量字段

重置 PK 自动增量列

在 Microsoft SQL Server 2008 R2 中重置自动增量

如何在ms访问中重置自动增量字段[重复]

在 Android 的 Room 库中重置自动增量 [关闭]