【问题标题】:Strange left-to-right arrows while running postgresql scripts运行 postgresql 脚本时出现奇怪的从左到右箭头
【发布时间】:2017-11-13 16:34:42
【问题描述】:

我想运行大约 5000 行 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
\.

copy 语句有很多插入。但是每次我运行数据库时,我都会得到这样的东西,上面有很多从左到右的箭头:

我不知道如何继续。当我检查我的数据库时,整个脚本并没有完全运行。仅创建表。 请问,有什么问题吗?

PS:我用的是 Linux Debian

【问题讨论】:

    标签: postgresql command-line psql


    【解决方案1】:

    当您COPY FROM STDIN 时,您会看到消息:

    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.
    

    这里的关键是

    以反斜杠和句点结束

    所以你的多个>> 只是意味着一个新行已从标准输入添加到 COPY 中。看到这些绝对没问题。你会在每一行看到这些,直到你把\.放在上面

    现在关于问题。您的脚本有错误(我复制/粘贴了其中的一部分):

    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"
    

    在我添加缺少的列之后(并将分隔符更改为空格以避免从网页复制时出现制表问题):

    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
    

    有效

    【讨论】:

    • 我认为缺少的列值只是复制和粘贴的结果。如果原始文件在0 之后包含一个制表符,那么一切都会好起来(该值将是null,然后是libelle
    • 是的,它会的。但是所有行都将被复制 - OP 已结束 \.... 我试图猜测没有复制数据的原因
    • 当然 - 很高兴为您提供帮助
    猜你喜欢
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多