Tengo una tabla en PostgreSQL con 22 columnas, y quiero agregar una clave primaria de incremento automático.
Traté de crear una columna llamada id
de tipo BIGSERIAL pero pgadmin respondió con un error:
ERROR: sequence must have same owner as table it is linked to.
¿Alguien sabe cómo solucionar este problema? ¿Cómo agrego un crear una clave primaria de incremento automático en PostgreSQL sin volver a crear la tabla?
sql
postgresql
mkn
fuente
fuente
ALTER TABLE mytable ADD PRIMARY KEY (column);
. Postgresql verificará que la columna no contenga NULL.bigserial
yserial
están dando el mismo error:ERROR: syntax error at or near "BIGSERIAL"
Clave primaria de incremento automático en postgresql:
Paso 1, crea tu tabla:
Paso 2, inserte valores en su tabla de esta manera, observe que mytable_key no se especifica en la primera lista de parámetros, esto hace que la secuencia predeterminada se incremente automáticamente.
Paso 3, selecciona * de tu tabla:
Paso 4, interpreta la salida:
Observe que la columna mytable_key se ha incrementado automáticamente.
ProTip:
Siempre debe usar una clave principal en su tabla porque postgresql usa internamente estructuras de tabla hash para aumentar la velocidad de las inserciones, eliminaciones, actualizaciones y selecciones. Si hay disponible una columna de clave primaria (que es forzada única y no nula), se puede confiar en que proporcionará una semilla única para la función hash. Si no hay una columna de clave principal disponible, la función hash se vuelve ineficiente ya que selecciona algún otro conjunto de columnas como clave.
fuente
SERIAL
crea unsequence
detrás de escena: postgresql.org/docs/9.2/static/…thing_id int references epictable(mytable_key)
trabajo?Cree una clave primaria de incremento automático en postgresql, utilizando una secuencia personalizada:
Paso 1, crea tu secuencia:
Paso 2, crea tu tabla
Paso 3, inserta en tu mesa
Paso 4, observa las filas
Las dos filas tienen claves que comienzan en 1 y se incrementan en 1, según lo definido por la secuencia.
Bonificación Elite ProTip:
Los programadores odian escribir, y escribirlo
nextval('splog_adfarm_seq')
es molesto. Puede escribirDEFAULT
para ese parámetro en su lugar, así:Para que lo anterior funcione, debe definir un valor predeterminado para esa columna clave en la tabla splog_adfarm. Lo cual es más bonito.
fuente
Si quieres hacer esto en pgadmin, es mucho más fácil. Parece que en postgressql, para agregar un incremento automático a una columna, primero debemos crear una secuencia de incremento automático y agregarla a la columna requerida. Me gustó esto.
1) En primer lugar, debe asegurarse de que haya una clave principal para su tabla. También mantenga el tipo de datos de la clave primaria en bigint o smallint. (Utilicé bigint, no pude encontrar un tipo de datos llamado serial como se menciona en otras respuestas en otro lugar)
2) Luego agregue una secuencia haciendo clic derecho en secuencia-> agregar nueva secuencia . Si no hay datos en la tabla, deje la secuencia como está, no realice ningún cambio. Solo guárdalo. Si hay datos existentes, agregue el último valor o el más alto en la columna de clave principal al valor Actual en la pestaña Definiciones como se muestra a continuación.
3) Finalmente, agregue la línea
nextval('your_sequence_name'::regclass)
al valor predeterminado en su clave principal como se muestra a continuación.Asegúrese de que el nombre de la secuencia sea correcto aquí. Esto es todo y el incremento automático debería funcionar.
fuente
Si desea usar números en una secuencia, defina una nueva secuencia con algo como
y luego modifique la tabla para usar la secuencia para la identificación:
fuente
He intentado el siguiente script para aumentar automáticamente con éxito la clave primaria en PostgreSQL.
EDITAR:
La palabra clave SERIAL crea automáticamente una secuencia para la columna respectiva.
fuente
ALTER SEQUENCE dummytable_id_seq RESTART WITH 1;
y está funcionando.Tal vez llego un poco tarde para responder esta pregunta, pero estoy trabajando en este tema en mi trabajo :)
Quería escribir la columna 'a_code' = c1, c2, c3, c4 ...
Primero abrí una columna con el nombre
ref_id
y el tiposerial
. Entonces resolví mi problema con este comando:fuente