HowTO:导入PSQL转储文件? pgAdminConsole或PSQL控制台

时间:2014-04-04 22:06:51

标签: sql postgresql psql pgadmin

大家好,因为标题说我在尝试从转储文件导入'创建'新数据库时遇到问题。当我尝试运行SQL查询时 - 我收到有关

的错误
  

'复制'

。当你通过psql控制台运行时我得到了

  

错误的命令\ n

SQL文件看起来像这样(只是一个样本,因为整个批次很大..)

--
-- PostgreSQL database dump
--

-- Dumped from database version 9.1.12
-- Dumped by pg_dump version 9.3.3
-- Started on 2014-04-01 17:05:29

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;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- TOC entry 209 (class 1259 OID 32258844)
-- Name: stats_call; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
--

CREATE TABLE bensonsorderlystats_call (
    id integer,
    callerid text,
    entry timestamp with time zone,
    oqid integer,
    oqnumcalls integer,
    oqannounced double precision,
    oqentrypos integer,
    oqexitpos integer,
    oqholdtime double precision,
    acdcallid text,
    acdentry timestamp with time zone,
    acdqueueid integer,
    acdagents integer,
    acdentrypos integer,
    acdexitpos integer,
    acdholdtime double precision,
    holdtime double precision,
    exit timestamp with time zone,
    agentid integer,
    talktime double precision,
    calltime double precision,
    callend timestamp with time zone,
    reason integer,
    wraptime double precision,
    acdsubqueueid integer,
    working integer,
    calledback integer,
    accountid integer,
    needed integer,
    ringingagentid integer,
    ringtime double precision,
    presented integer,
    notecode integer,
    note text,
    recording text,
    wrapcode integer
);


ALTER TABLE public.stats_call OWNER TO postgres;

--
-- TOC entry 2027 (class 0 OID 32258844)
-- Dependencies: 209
-- Data for Name: stats_call; Type: TABLE DATA; Schema: public; Owner: postgres
--

COPY stats (id, callerid, entry, oqid, oqnumcalls, oqannounced, oqentrypos, oqexitpos, oqholdtime, acdcallid, acdentry, acdqueueid, acdagents, acdentrypos, acdexitpos, acdholdtime, holdtime, exit, agentid, talktime, calltime, callend, reason, wraptime, acdsubqueueid, working, calledback, accountid, needed, ringingagentid, ringtime, presented, notecode, note, recording, wrapcode) FROM stdin;
1618693 unknown 2014-02-01 02:59:48.297+00  2512    \n  \n  \n  \n  0   1391223590.58579    2014-02-01 02:59:48.297+00  1872    \n

enter image description here

当我运行导入时,在上面的屏幕上

\i C:<path>/file.sql with delimiter \n我得错了命令\ n 我也试过了

`\i C:<path>/file.sql delimiter \n`
`\i C:<path>/file.sql`

任何人都可以告诉我,如何让这个数据库进入服务器。帮助赞赏。感谢

2 个答案:

答案 0 :(得分:2)

通常,您可以在包含SQL文件之前在\set ON_ERROR_STOP中发出psql,以便在第一个错误处停止并且不会被后续错误淹没。

尝试复制到不存在的表时,COPY失败,其后的所有数据都被拒绝,并带有大量错误消息。

看看转储的开头,确实存在一些问题。

它创建了一个名为bensonsorderlystats_call的表,但随后将postgres的所有权赋予另一个不应该存在的public.stats_call

然后它尝试将数据复制到名为stats的表中,该表也从未创建过,假设您正在恢复到空数据库中。

看起来好像有人手动编辑了转储并搞砸了。

答案 1 :(得分:0)

尝试psql -U username -f dump.sql database_name