426 Stimmen

Zurücksetzen des automatischen Zählers in Postgres

Ich möchte das Auto-Inkrement-Feld einer Tabelle auf einen bestimmten Wert zwingen, habe ich mit diesem versucht:

ALTER TABLE product AUTO_INCREMENT = 1453

UND

ALTER SEQUENCE product  RESTART WITH 1453;
ERROR:  relation "your_sequence_name" does not exist

Ich bin neu bei Postgres :(

Ich habe eine Tabelle product con Id y name Feld

1voto

GarryOne Punkte 1238

Knoten-Skript: Fix alle Tabellen Identität: Auto-Inkrement / nextval, basierend auf dem letzten eingefügten es.

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();

0voto

abby Punkte 672

Beachten Sie, dass bei Tabellennamen mit '_' dieser im Sequenznamen entfernt wird.

Zum Beispiel, Tabellenname: user_tokens Spalte: id Name der Sequenz: usertokens_id_seq

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X