PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Nach dem Wiederherstellen meiner Datenbankserie wurde sie aus der Spalte in Postgresql entfernt

Sie haben während der Wiederherstellung der Datenbank nicht nach Fehlern gesucht; es sollten ein paar gewesen sein.

Ein Dump einer Tabelle wie Ihrer sieht in PostgreSQL v10 so aus (dies ist 10.3 und sieht in 10.1 etwas anders aus, aber das ist in diesem Fall irrelevant):

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

Jetzt ist das Problem, dass AS integer wurde in CREATE SEQUENCE eingeführt in PostgreSQL v10, sodass diese Anweisung in 9.6 mit einem Syntaxfehler fehlschlägt.

Was ist die Konsequenz?

  • Die Tabelle wird wie in der ersten Anweisung erstellt.

  • Die dritte Anweisung, die die Sequenz erstellt, schlägt fehl.

  • Alle folgenden Anweisungen, die die Sequenz erfordern, werden ebenfalls fehlschlagen.

Hinweis: Ein Downgrade von PostgeSQL mit Dump und Restore wird nicht unterstützt.

Die Lösung besteht darin, den Dump manuell zu bearbeiten, bis er funktioniert, insbesondere müssen Sie den AS integer entfernen oder AS bigint -Klausel in CREATE SEQUENCE .