포스트그레스 자동 증가 카운터 재설정
테이블의 자동 증분 필드를 강제로 어떤 값으로 설정하려고 합니다. 이 값을 사용하여 시도했습니다.
ALTER TABLE product AUTO_INCREMENT = 1453
그리고.
ALTER SEQUENCE product RESTART WITH 1453;
ERROR: relation "your_sequence_name" does not exist
가 productId ★★★★★★★★★★★★★★★★★」name 정보
을 product an id 열, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄, 줄.product, '''가 아니라product_id_seq (마이너스)${table}_${column}_seq를 참조해 주세요.
은 ★★★입니다.ALTER SEQUENCE다음 중 하나:
ALTER SEQUENCE product_id_seq RESTART WITH 1453
는, 「」를 할 수 .\dspsql을 사용하다 하면.\d product인 ""를 합니다.nextval(...)합니다.call은 시퀀스 이름을 지정합니다.
다음 명령어는 이 작업을 자동으로 수행합니다.이렇게 하면 테이블의 모든 데이터도 삭제됩니다. 그러니 조심하세요.
TRUNCATE TABLE someTable RESTART IDENTITY;
다음은 제품 테이블의 시퀀스가 product_id_seq라고 가정할 때 사용하는 명령어입니다.
ALTER SEQUENCE product_id_seq RESTART WITH 1453;
시퀀스 카운터를 설정하려면:
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 psql★★★★★★★★★★★★★★★★★★:
=> \d product
Table "public.product"
Column | Type | Modifiers
--------+---------+------------------------------------------------------
id | integer | not null default nextval('product_id_seq'::regclass)
name | text |
-- Change the starting value of the sequence
ALTER SEQUENCE project_id_seq RESTART 3000;
동일하지만 동적:
SELECT SETVAL('project_id_seq', (SELECT MAX(id) FROM project));
「」의 SELECT이치노
출처 : https://kylewbanks.com/blog/Adding-or-Modifying-a-PostgreSQL-Sequence-Auto-Increment
삭제됨: 삭제됨+1에 된 바와
다음 값을 리셋하는 ID 컬럼이 있는 테이블이 있는 경우 다음 명령을 사용할 수 있습니다.
ALTER TABLE <table name>
ALTER COLUMN <column name>
RESTART WITH <new value to restart with>;
방문자 편의를 위해 댓글에서 변환
이 메시지에서는 올바른 구문이 무엇인지 명확하지 않습니다.그 이유는 다음과 같습니다.
ALTER SEQUENCE product_id_seq RESTART WITH 1453;
다음으로 높은 값으로 설정하려면 다음 명령을 사용합니다.
SELECT SETVAL(pg_get_serial_sequence('table_name', 'column_name'), (SELECT MAX(column_name) FROM table_name));
2021년, Postgres 11.12
ALTER SEQUENCE는 작동하지 않습니다. 어떻게든 NULL로 재설정됩니다.나에게 효과가 있었던 것은:
SELECT setval('<table>_<column>_seq', 5);
GUI 에서 자동 증분을 리셋 하는 경우는, 다음의 순서를 실행합니다.
- 데이터베이스로 이동
- Public(공용)
- 테이블 목록 페이지에서 '테이블', '보기', '시퀀스'와 같은 탭을 볼 수 있습니다.
- Sequence 클릭
- Sequences(시퀀스)를 클릭하면 모든 Sequence Listing(시퀀스 목록)을 볼 수 있습니다. 재설정할 Sequences(시퀀스)를 클릭합니다.
- 그런 다음 '변경', '값 설정', '재시작', '재설정' 등의 다중 선택 항목을 볼 수 있습니다.
- [ Reset ]를 클릭하여 [New Row]를 1개 추가합니다.
자동 증분을 리셋하려면 다음 쿼리를 사용하여 시퀀스 이름을 얻어야 합니다.
구문:
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');
그러면 시퀀스 ID가 tableName_ColumnName_seq로 지정됩니다.
마지막 시드 번호를 얻으려면
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)로 사용됩니다.
테이블이 다음과 같다면
bigint NOT NULL GENERATED ALWAYS AS IDENTITY ( INCREMENT 1 START 0)
범위 내의 레코드를 삽입한 후0-9, 는, 다음의 경합을 일으킵니다.insertSTART 를 리셋 하려면 , 다음과 같이 하십시오.
ALTER TABLE ... ALTER COLUMN ... RESTART WITH 10;
위의 모든 답변에 대해 확신할 수 없습니다. 시퀀스 이름이 없으면 어떻게 합니까?테이블을 자르지 않으려면 어떻게 해야 합니까?
아래 쿼리를 통해 기존 데이터에 영향을 주지 않고 작업을 수행할 수 있었습니다.
ALTER TABLE <<table_name>>
ALTER COLUMN <<primary_key_column_name>> RESTART SET START 4044;
테이블 이름에 '_'가 있으면 시퀀스 이름에서 삭제됩니다.
예를 들어 테이블 이름:user_tokens 컬럼:id Sequence name:usertokens_id_seq 입니다.
노드 스크립트:모든 테이블 ID(마지막으로 삽입된 ID를 기반으로 자동 증가 / nextval)를 수정합니다.
const pg = require('pg');
const { Client } = pg;
const updateTables = async () => {
const client = new Client({
user: 'postgres',
host: 'localhost',
database: 'my-database',
password: 'postgres',
port: 5432,
});
await client.connect();
console.log('Connected');
const execQuery = async (queryStr, params = []) => {
return new Promise((resolve, reject) => {
client.query(queryStr, params, (error, results) => {
if (error) {
reject(error);
} else {
resolve(results);
}
})
})
}
const tablesRes = await execQuery(`
SELECT table_name
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='public';
`)
const tables = tablesRes.rows.map(row => row.table_name);
tables.map(async tableName => {
let lastId;
try {
const res = await execQuery(`SELECT id from "${tableName}" ORDER BY id DESC LIMIT 1`);
lastId = res.rows[0].id;
} catch (e) {}
if (lastId) {
const nextId = lastId + 1;
const queryStr = `ALTER SEQUENCE ${tableName}_id_seq RESTART WITH ${nextId}`;
await execQuery(queryStr);
console.log(tableName, queryStr);
}
})
};
updateTables();
ALTER SEQUENCE public."Table_Id_seq"
RESTART 50;
이 질문은 나에게 효과가 있었다.Postgresql 버전 14
언급URL : https://stackoverflow.com/questions/5342440/reset-auto-increment-counter-in-postgres
'programing' 카테고리의 다른 글
| SQL에서 최소 두 개의 값 가져오기 (0) | 2023.04.12 |
|---|---|
| Bash 변수 범위 (0) | 2023.04.12 |
| VBA: 조건부 - 아무것도 아니다 (0) | 2023.04.12 |
| EF Code First의 계산된 열 (0) | 2023.04.12 |
| UNION [ALL]에서 SELECT INTO 조항을 사용할 수 있습니까? (0) | 2023.04.07 |