2017-06-12 1 views
0

Je veux exécuter environ 5000 lignes de scripts postgresql. Pour des raisons professionnelles, je ne peux pas partager tout le contenu du script. Mais j'ai quelque chose un peu comme ceci:Des flèches étranges de gauche à droite lors de l'exécution de scripts postgresql

SET statement_timeout = 0; 
SET lock_timeout = 0; 
SET client_encoding = 'UTF8'; 
SET standard_conforming_strings = on; 
SET check_function_bodies = false; 
SET client_min_messages = warning; 

SET search_path = public, pg_catalog; 
... 
ALTER TABLE ONLY public.client DROP CONSTRAINT client_pkey; 
... 
ALTER TABLE public.client ALTER COLUMN id DROP DEFAULT; 
... 
DROP SEQUENCE public.client_id_seq; 
DROP TABLE public.client; 
... 
-- 
-- Name: client; Type: TABLE; Schema: public; Owner: myDB; Tablespace: 
-- 

CREATE TABLE client (
    id integer NOT NULL, 
    libelle character varying(255) 
); 


ALTER TABLE client OWNER TO myDB; 

-- 
-- Name: client_id_seq; Type: SEQUENCE; Schema: public; Owner: myDB 
-- 

CREATE SEQUENCE client_id_seq 
    START WITH 1 
    INCREMENT BY 1 
    NO MINVALUE 
    NO MAXVALUE 
    CACHE 1; 


ALTER TABLE client_id_seq OWNER TO myDB; 

-- 
-- Name: client_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: myDB 
-- 
-- 
-- Data for Name: client; Type: TABLE DATA; Schema: public; Owner: myDB 
-- 

COPY client (id, libelle) FROM stdin; 
0 
1 XX 
247 YY 
248 ZZ 
\. 

Il y a beaucoup d'insertions avec la déclaration copy. Mais chaque fois que je lance la DB, je reçois quelque chose comme ça avec beaucoup de flèches de gauche à droite: enter image description here

Et je ne sais pas comment continuer. Lorsque je vérifie ma base de données, le script global n'est pas totalement exécuté. Seules les tables sont créées. S'il vous plaît, quel est le problème?

PS: J'utilise Linux Debian

Répondre

2

Lorsque vous COPY FROM STDIN vous voyez un message:

t=# copy s151 from stdin; 
Enter data to be copied followed by a newline. 
End with a backslash and a period on a line by itself. 

la clé est ici

End avec une barre oblique inverse et une période sur une ligne par lui-même

Donc votre multiple >> signifie simplement qu'une nouvelle ligne a été ajoutée à COPY à partir de stdin. Considérer ceux-ci est absolument OK. Vous verrez ceux-ci sur chaque nouvelle ligne jusqu'à ce que vous mettiez \. dessus

Maintenant concernant le problème. Votre script a erreur (copier/coller une partie de celui-ci):

t=# \! cat so.sql 
CREATE TABLE client (
    id integer NOT NULL, 
    libelle character varying(255) 
); 
COPY client (id, libelle) FROM stdin; 
0 
1 XX 
247 YY 
248 ZZ 
\. 

t=# \i so.sql 
CREATE TABLE 
psql:so.sql:10: ERROR: missing data for column "libelle" 
CONTEXT: COPY client, line 1: "0" 

Après avoir activé la colonne manquante (et changer delimiter à l'espace pour éviter les problèmes de tabulation lors de la copie de la page Web):

t=# \! cat so.sql 
COPY client (id, libelle) FROM stdin delimiter ' '; 
0 ZZ 
1 XX 
247 YY 
248 ZZ 
\. 
t=# \i so.sql 
COPY 4 

Cela fonctionne

+0

Je pense que la valeur de colonne manquante est juste un résultat de copier et coller. Si le fichier d'origine contenait un caractère de tabulation après le '0' alors tout irait bien (la valeur serait' null' alors pour 'libelle') –

+0

oui, ce serait le cas. Mais toutes les lignes seraient copiées - OP a la fin '\. '... J'ai essayé de deviner la raison pour laquelle les données n'ont pas été copiées –

+0

Thx, cela fonctionne très bien – kabrice