sql >> Databáze >  >> RDS >> PostgreSQL

Po obnovení mé databáze byl seriál odstraněn ze sloupce v Postgresql

Během obnovy databáze jste nezkontrolovali chyby; mělo jich být několik.

Výpis tabulky, jako je ta vaše, bude v PostgreSQL v10 vypadat takto (toto je 10.3 a ve verzi 10.1 vypadá trochu jinak, ale to je v tomto případě irelevantní):

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

Nyní je problém v tom, že AS integer byl zaveden do CREATE SEQUENCE v PostgreSQL v10, takže tento příkaz selže s chybou syntaxe v 9.6.

Jaký je důsledek?

  • Tabulka je vytvořena jako v prvním příkazu.

  • Třetí příkaz vytvářející sekvenci se nezdaří.

  • Všechny následující příkazy, které vyžadují sekvenci, také selžou.

Poznámka: Není podporováno downgrade PostgeSQL pomocí výpisu a obnovení.

Řešením je ručně upravovat výpis, dokud nebude fungovat, zejména budete muset odstranit AS integer nebo AS bigint klauzule v CREATE SEQUENCE .




  1. MAX() – Najděte maximální hodnotu ve sloupci v MySQL

  2. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Selhání komunikačního spojení

  3. SQL Server – Zkrat dotazu?

  4. Použití INNER JOIN ke kombinaci tabulek SQL Server a jejich zobrazení ve webových formulářích ASP.NET