PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Après la restauration de la série de ma base de données supprimée de la colonne dans Postgresql

Vous n'avez pas vérifié les erreurs lors de la restauration de la base de données ; il aurait dû y en avoir quelques-uns.

Un vidage d'une table comme la vôtre ressemblera à ceci dans PostgreSQL v10 (c'est 10.3 et il semble légèrement différent dans 10.1, mais ce n'est pas pertinent dans ce cas) :

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);

Maintenant, le problème est que AS integer a été initié à CREATE SEQUENCE dans PostgreSQL v10, donc cette instruction échouera avec une erreur de syntaxe dans 9.6.

Quelle est la conséquence ?

  • La table est créée comme dans la première instruction.

  • La troisième instruction créant la séquence échoue.

  • Toutes les instructions suivantes qui nécessitent la séquence échoueront également.

Remarque : Il n'est pas pris en charge de rétrograder PostgeSQL avec vidage et restauration.

La solution est d'éditer manuellement le dump jusqu'à ce qu'il fonctionne, il faudra notamment supprimer le AS integer ou AS bigint clause dans CREATE SEQUENCE .