una tipos serial secuencia programación primary postgres llave foranea datos con campo autoincrement auto_increment asignar sql postgresql

tipos - ¿Cómo establecer la clave primaria de auto incremento en PostgreSQL?



programación en sql con postgresql (6)

Tengo una tabla en PostgreSQL con 22 columnas y quiero agregar una clave primaria de incremento automático.

Intenté crear una columna llamada id del 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 y creo una clave primaria de incremento automático en PostgreSQL sin volver a crear la tabla?


Clave primaria de incremento automático en postgresql:

Paso 1, crea tu tabla:

CREATE TABLE epictable ( mytable_key serial primary key, moobars VARCHAR(40) not null, foobars DATE );

Paso 2, inserte valores en su tabla de esta manera, observe que mytable_key no está especificado en la primera lista de parámetros, esto hace que la secuencia predeterminada se incremente automáticamente.

insert into epictable(moobars,foobars) values(''delicious moobars'',''2012-05-01'') insert into epictable(moobars,foobars) values(''worldwide interblag'',''2012-05-02'')

Paso 3, selecciona * de tu tabla:

el@voyager$ psql -U pgadmin -d kurz_prod -c "select * from epictable"

Paso 4, interpreta la salida:

mytable_key | moobars | foobars -------------+-----------------------+------------ 1 | delicious moobars | 2012-05-01 2 | world wide interblags | 2012-05-02 (2 rows)

Observe que la columna mytable_key se ha incrementado automáticamente.

ProTip:

Siempre debe utilizar una clave principal en su tabla porque postgresql utiliza internamente estructuras de tablas hash para aumentar la velocidad de inserciones, eliminaciones, actualizaciones y selecciones. Si una columna de clave principal (que es forzada única y no nula) está disponible, se puede confiar en ella para 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.


Pruebe este comando:

ALTER TABLE your_table ADD COLUMN key_column BIGSERIAL PRIMARY KEY;

Pruébelo con el mismo usuario de base de datos que el que creó la tabla.


Si desea usar números en una secuencia, defina una nueva secuencia con algo como

CREATE SEQUENCE public.your_sequence INCREMENT 1 START 1 MINVALUE 1 ;

y luego alterar la tabla para usar la secuencia para el id:

ALTER TABLE ONLY table ALTER COLUMN id SET DEFAULT nextval(''your_sequence''::regclass);


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 necesitamos crear una secuencia de incremento automático y agregarla a la columna requerida. Me gustó esto.

1) Primero debe asegurarse de que haya una clave principal para su mesa. También mantenga el tipo de datos de la clave principal en bigint o smallint. (Utilicé bigint, no pude encontrar un tipo de datos llamado serial como se menciona en otras respuestas en otra parte)

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 cambios. Sólo guárdalo. Si hay datos existentes, agregue el último valor o el valor más alto en la columna de clave principal a la pestaña Valor actual en 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.


Tal vez llegue 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 ...

En primer lugar abrí una columna con el nombre ref_id y el tipo serial . Entonces resolví mi problema con este comando:

update myschema.mytable set a_code=cast(''c''||"ref_id" as text)


Cree una clave principal que se incremente automáticamente en postgresql, utilizando una secuencia personalizada:

Paso 1, crea tu secuencia:

create sequence splog_adfarm_seq start 1 increment 1 NO MAXVALUE CACHE 1; ALTER TABLE fact_stock_data_detail_seq OWNER TO pgadmin;

Paso 2, crea tu tabla

CREATE TABLE splog_adfarm ( splog_key INT unique not null, splog_value VARCHAR(100) not null );

Paso 3, inserte en su mesa

insert into splog_adfarm values ( nextval(''splog_adfarm_seq''), ''Is your family tree a directed acyclic graph?'' ); insert into splog_adfarm values ( nextval(''splog_adfarm_seq''), ''Will the smart cookies catch the crumb? Find out now!'' );

Paso 4, observa las filas.

el@defiant ~ $ psql -U pgadmin -d kurz_prod -c "select * from splog_adfarm" splog_key | splog_value ----------+-------------------------------------------------------------------- 1 | Is your family tree a directed acyclic graph? 2 | Will the smart cookies catch the crumb? Find out now! (3 rows)

Las dos filas tienen claves que comienzan en 1 y se incrementan en 1, según lo define la secuencia.

Bonus Elite ProTip:

Los programadores odian escribir, y escribir el siguiente nextval(''splog_adfarm_seq'') es molesto. En su lugar, puede escribir DEFAULT para ese parámetro, así:

insert into splog_adfarm values ( DEFAULT, ''Sufficient intelligence to outwit a thimble.'' );

Para que funcione lo anterior, debe definir un valor predeterminado para esa columna de clave en la tabla splog_adfarm. Que es más bonita.