Eu iniciei um dump de tabela e onde quer que venha o valor NULL, o arquivo dump tem \N
para isso.
Durante a restauração estou recebendo este erro.
comando inválido \N
A codificação do banco de dados é UTF8
.
Fiz o dump e tentei restaurar no mesmo servidor, mas o banco de dados diferente. Existem algumas soluções para isso. Mas ainda estou tentando corrigi-lo sem fazer mais alterações na codificação do banco de dados.
Estrutura da Mesa:
CREATE TABLE person.person (
businessentityid integer NOT NULL,
persontype character(2) NOT NULL,
namestyle public."NameStyle" DEFAULT false NOT NULL,
title character varying(8),
firstname public."Name" NOT NULL,
middlename public."Name",
lastname public."Name" NOT NULL,
suffix character varying(10),
emailpromotion integer DEFAULT 0 NOT NULL,
additionalcontactinfo xml,
demographics xml,
rowguid uuid DEFAULT public.uuid_generate_v1() NOT NULL,
modifieddate timestamp without time zone DEFAULT now() NOT NULL,
CONSTRAINT "CK_Person_EmailPromotion" CHECK (((emailpromotion >= 0) AND (emailpromotion <= 2))),
CONSTRAINT "CK_Person_PersonType" CHECK (((persontype IS NULL) OR (upper((persontype)::text) = ANY (ARRAY['SC'::text, 'VC'::text, 'IN'::text, 'EM'::text, 'SP'::text, 'GC'::text]))))
);
Linha de erro
COPY person.person (businessentityid, persontype, namestyle, title, firstname, middlename, lastname, suffix, emailpromotion, additionalcontactinfo, demographics, rowguid, modifieddate) FROM stdin;
1 EM f \N Ken J Sánchez \N 0 \N <IndividualSurvey xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/IndividualSurvey"><TotalPurchaseYTD>0</TotalPurchaseYTD></IndividualSurvey> 92c4279f-1207-48a3-8448-4636514eb7e2 2009-01-07 00:00:00
A causa raiz mais plausível é que a
person.person
tabela não foi criada devido a alguns destes motivos:refere-se ao
public.uuid_generate_v1()
que requer auuid-ossp
extensão que pode não ser instalada, especialmente se for um dump de tabela, não um dump de banco de dados (portanto, não teria a instrução CREATE EXTENSION)refere-se a tipos personalizados
public."NameStyle"
epublic."Name"
que também podem não existir.Por padrão, o psql não para no primeiro erro, então neste caso ele continuaria com o
COPY
comando, que falharia e deixaria o fluxo de entrada na próxima linha. Esta linha e outras abaixo dela contêm dados embutidos, mas o psql não sabe disso e os interpreta como comandos, o que normalmente leva a erros \N de comando inválido .Solução : use
psql -v ON_ERROR_STOP=on -f script.sql
e resolva os erros conforme eles aparecem em ordem cronológica.