PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Depois de restaurar o serial do meu banco de dados removido da coluna no Postgresql


Você não verificou erros durante a restauração do banco de dados; deveria haver alguns.

Um dump de uma tabela como a sua ficará assim no PostgreSQL v10 (este é 10.3 e parece um pouco diferente em 10.1, mas isso é irrelevante para este 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);

Agora o problema é que AS integer foi apresentado a CREATE SEQUENCE no PostgreSQL v10, então essa instrução falhará com um erro de sintaxe na versão 9.6.

Qual é a consequência?

  • A tabela é criada como na primeira instrução.

  • A terceira instrução que cria a sequência falha.

  • Todas as instruções a seguir que exigem a sequência também falharão.

Observação: Não há suporte para fazer downgrade do PostgeSQL com dump e restauração.

A solução é editar manualmente o dump até que funcione, em particular você terá que remover o AS integer ou AS bigint cláusula em CREATE SEQUENCE .