PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Dopo aver ripristinato il mio database seriale rimosso dalla colonna in Postgresql

Non hai verificato la presenza di errori durante il ripristino del database; avrebbero dovuto essercene alcuni.

Un dump di una tabella come la tua apparirà così in PostgreSQL v10 (questo è 10.3 e sembra leggermente diverso in 10.1, ma è irrilevante in questo caso):

CREATE TABLE public.produto (
    produto_id integer NOT NULL
);

ALTER TABLE public.produto OWNER TO laurenz;

CREATE SEQUENCE public.produto_produto_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

ALTER TABLE public.produto_produto_id_seq OWNER TO laurenz;

ALTER SEQUENCE public.produto_produto_id_seq
    OWNED BY public.produto.produto_id;

ALTER TABLE ONLY public.produto
    ALTER COLUMN produto_id
    SET DEFAULT nextval('public.produto_produto_id_seq'::regclass);

Ora il problema è che AS integer è stato introdotto CREATE SEQUENCE in PostgreSQL v10, in modo che l'istruzione fallisca con un errore di sintassi in 9.6.

Qual è la conseguenza?

  • La tabella viene creata come nella prima istruzione.

  • La terza istruzione che crea la sequenza ha esito negativo.

  • Anche tutte le seguenti istruzioni che richiedono la sequenza avranno esito negativo.

Nota: Non è supportato il downgrade di PostgeSQL con dump e ripristino.

La soluzione è modificare manualmente il dump finché non funziona, in particolare dovrai rimuovere il AS integer o AS bigint clausola in CREATE SEQUENCE .