Hay una manera de restablecer la clave principal de una tabla de PostgreSQL para comenzar a la 1 de nuevo en un poblado de la tabla?

Ahora es la generación de números de 1000000 y de seguridad. Quiero que todos se reiniciará y comenzará a 1, manteniendo todos los datos intactos.

InformationsquelleAutor David | 2010-09-29

3 Comentarios

  1. 30

    Claves principales que autoincrement (es decir, las columnas con el tipo de datos serial primary key) están asociados con un secuencia. Puede establecer el siguiente valor de la secuencia de uso de la setval(<seqname>, <next_value>) función. Tenga en cuenta que en realidad se ejecuta la función por sí mismo que necesita para utilizar SELECCIONAR, como este: SELECT setval(<seqname>, <next_value>)

    El nombre de la auto secuencias creadas cuando se utiliza de serie son <table>_<column>_seq

    • Usted necesidad de poner «SELECCIONAR» en la parte frontal de la llamada, por ejemplo, SELECT setval('table_id_seq', 10000)
    • Si hago SELECT setval('table_id_seq', 1), al insertar un nuevo registro con el id toma el valor 2, en lugar de 1. Paweł Gościcki la solución funciona. (PostgreSQL 9.3)
    • Presumiblemente, lo que sucedió es que el número de secuencia se incrementa antes de que la nueva clave principal se le asigna, es decir,. iba a necesitar para restablecer a 0. Pero estoy de acuerdo con la otra solución es mejor de todos modos.
  2. 145

    La mejor manera de restablecer una secuencia a empezar de nuevo con el número 1 es ejecutar el siguiente:

    ALTER SEQUENCE <tablename>_<id>_seq RESTART WITH 1

    Así, por ejemplo, para la users tabla sería:

    ALTER SEQUENCE users_id_seq RESTART WITH 1
    • El WITH 1 parámetro es redundand y puede ser no se incluye
    • Esa es la única respuesta correcta ya que lo que realmente restablecer la secuencia.
  3. 0

    @azulado de la realidad de la inserción de un nuevo registro mediante un incremento automático de la clave primaria, es como usar una secuencia explícita de esta manera:

    INSERT INTO MyTable (id, col1, ...) VALUES (MySeq.nextval(), val1, ...)

    Por lo tanto, si desea que el primer identificador 1, se debe establecer la secuencia a 0. Pero fuera de los límites, por lo que debe utilizar el ALTER SEQUECE declaración.
    Por lo tanto, si usted tiene una serie de el nombre del campo de número en el menú tabla, por ejemplo:

    ALTER SEQUENCE menu_number_seq RESTART

    va a hacer el trabajo perfectamente.

Dejar respuesta

Please enter your comment!
Please enter your name here