【问题标题】:Reset auto increment counter in postgresql在 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 并不是能够加快处理速度的魔法限制)

标签: sql postgresql auto-increment reset


【解决方案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';

【讨论】:

    猜你喜欢
    • 2011-07-17
    • 1970-01-01
    • 2010-10-21
    • 2018-07-24
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多