테이블의 자동 증분 필드를 특정 값으로 설정하고 싶습니다.
ALTER TABLE product AUTO_INCREMENT = 1453
과
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
나는 postgres를 처음 사용합니다 :(
나는 테이블이 product
와 Id
및 name
필드
테이블의 자동 증분 필드를 특정 값으로 설정하고 싶습니다.
ALTER TABLE product AUTO_INCREMENT = 1453
과
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
나는 postgres를 처음 사용합니다 :(
나는 테이블이 product
와 Id
및 name
필드
답변:
테이블을 만든 경우 product
와 id
열, 다음 순서는 단순히 호출되지 product
않고, product_id_seq
(입니다 ${table}_${column}_seq
).
이것이 ALTER SEQUENCE
필요한 명령입니다.
ALTER SEQUENCE product_id_seq RESTART WITH 1453
\ds
psql 의 명령을 사용하여 데이터베이스의 시퀀스를 볼 수 있습니다 . 당신이 경우에 \d product
당신의 열의 기본 제약 봐의 nextval(...)
호출은 너무 시퀀스 이름을 지정합니다.
ALTER SEQUENCE yourTableName_yourColumnName_seq RESTART WITH #
. 여기서 "seq"는 리터럴 텍스트이며 #에 숫자를 입력합니다. 밑줄을 무시하지 마십시오. :-)
ALTER SEQUENCE my_schema.product_id_seq RESTART WITH 1453
1453
해야합니다 RESTART WITH 1454
.
다음 명령이 자동으로 이를 수행합니다. 테이블의 모든 데이터도 삭제됩니다. 그러니 조심해.
TRUNCATE TABLE someTable RESTART IDENTITY;
TABLE
키워드는 중복됩니다. TRUNCATE someTable RESTART IDENTITY;
충분하다.
TRUNCATE someTable RESTART IDENTITY CASCADE;
했습니까?
시퀀스 카운터를 설정하려면
setval('product_id_seq', 1453);
시퀀스 이름을 모르는 경우 pg_get_serial_sequence
함수를 사용하십시오 .
select pg_get_serial_sequence('product', 'id');
pg_get_serial_sequence
------------------------
public.product_id_seq
매개 변수는 테이블 이름과 열 이름입니다.
또는 프롬프트 \d product
에서 a 를 발행하십시오 psql
.
=> \d product
Table "public.product"
Column | Type | Modifiers
--------+---------+------------------------------------------------------
id | integer | not null default nextval('product_id_seq'::regclass)
name | text |
-시퀀스의 시작 값을 변경
ALTER SEQUENCE project_id_seq RESTART 3000;
동일하지만 동적 :
SELECT SETVAL('project_id_seq', (SELECT MAX(id) + 1 FROM project));
SELECT 사용이 혼란 스럽지만 작동한다는 데 동의합니다.
출처 : https://kylewbanks.com/blog/Adding-or-Modifying-a-PostgreSQL-Sequence-Auto-Increment
brew services restart postgresql
자동 증분을 재설정하려면 다음 쿼리를 사용하여 시퀀스 이름을 가져와야합니다.
통사론:
SELECT pg_get_serial_sequence(‘tablename’, ‘ columnname‘);
예:
SELECT pg_get_serial_sequence('demo', 'autoid');
쿼리는 autoid의 시퀀스 이름을 "Demo_autoid_seq" 로 반환합니다. 후 다음 쿼리를 사용하여 autoid를 재설정합니다
통사론:
ALTER SEQUENCE sequenceName RESTART WITH value;
예:
ALTER SEQUENCE "Demo_autoid_seq" RESTART WITH 1453;
시퀀스 ID를 사용하려면
SELECT pg_get_serial_sequence('tableName', 'ColumnName');
이것은 당신에게 tableName_ColumnName_seq 와 같은 sequesce ID를 줄 것입니다
마지막 시드 번호를 사용하려면
select currval(pg_get_serial_sequence('tableName', 'ColumnName'));
또는 시퀀스 ID를 이미 알고 있다면 직접 사용하십시오.
select currval(tableName_ColumnName_seq);
마지막 시드 번호를 알려줍니다
시드 번호를 재설정하려면
ALTER SEQUENCE tableName_ColumnName_seq RESTART WITH 45
이 쿼리를 사용 하여 스키마 및 테이블 이 포함 된 시퀀스 키 를 확인하십시오 .
SELECT pg_get_serial_sequence('"SchemaName"."TableName"', 'KeyColumnName'); // output: "SequenceKey"
이 쿼리 증가 증분 값을 하나씩 사용하십시오.
SELECT nextval('"SchemaName"."SequenceKey"'::regclass); // output 110
테이블에 삽입 할 때 다음 증가 된 값이 키 (111)로 사용됩니다.
이 쿼리를 사용하여 특정 값을 증분 값으로 설정하십시오.
SELECT setval('"SchemaName"."SequenceKey"', 120);
테이블에 삽입 할 때 다음 증가 된 값이 키 (121)로 사용됩니다.