Una
secuencia es un objeto de la base de datos que es el encargado de incrementar automaticamente frente a la acción de una tabla.
Cuando creas un serial, implicitamente está creando una secuencia y poniendola como valor por defecto en la tabla.
Esto:
CREATE TABLE tablename (
colname SERIAL
);
Es exactamente igual a esto:
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
colname integer DEFAULT nextval('tablename_colname_seq') NOT NULL
);
cuando te dice que no existe la relación newsequence es por que no has creado el objeto.
MIra la seguidilla de esto:
Código SQL:
Ver originalpruebas=> CREATE TABLE prueba_sequence(id INTEGER, nombre TEXT);
CREATE TABLE
pruebas=> \d prueba_sequence
Tabla ½public.prueba_sequence╗
Columna | Tipo | Modificadores
---------+---------+---------------
id | INTEGER |
nombre | text |
pruebas=> ALTER TABLE prueba_sequence ALTER COLUMN id SET DEFAULT NEXTVAL('newsequence'::regclass);
ERROR: no existe la relación «newsequence»
pruebas=> CREATE SEQUENCE newsequence;
CREATE SEQUENCE
pruebas=> ALTER TABLE prueba_sequence ALTER COLUMN id SET DEFAULT NEXTVAL('newsequence'::regclass);
ALTER TABLE
pruebas=> \d prueba_sequence
Tabla ½public.prueba_sequence╗
Columna | Tipo | Modificadores
---------+---------+---------------------------------------------------
id | INTEGER | valor por omisin NEXTVAL('newsequence'::regclass)
nombre | text |
pruebas=>