0

我有一个转储文件的问题,客户给了我一个文件来连接 php 中的 postgres 数据库,我首先这样做

  1. 将此文件ssdf_master.dump重命名为ssdf_master.sql以在 pgAdmin 或 Navicat 中执行但不起作用。
  2. 运行这个 pg_restore ssdf_master.dump并要求输入密码并输入我保存在 pgAdmin 中但没有的密码。

我的 ssdf_master.dump 有 \N 和 . 当在navicat 中运行该文件时显示此错误:

[Err] ERROR:  error de sintaxis en o cerca de «01»
LINE 784: 01 Aguascalientes AGS 00000 99999 \N

文件提取

--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET client_encoding = 'LATIN1';
SET standard_conforming_strings = off;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET escape_string_warning = off;

--
-- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: postgres
--

CREATE PROCEDURAL LANGUAGE plpgsql;


ALTER PROCEDURAL LANGUAGE plpgsql OWNER TO postgres;

SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: scg; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
--

CREATE TABLE scg (
    base_datos character varying(8),
    ip character varying(15),
    tipo character(1),
    owner character varying(8),
    own_passwd character varying(8)
);


ALTER TABLE public.scg OWNER TO postgres;

--
-- Data for Name: scg; Type: TABLE DATA; Schema: public; Owner: postgres
--

COPY scg (base_datos, ip, tipo, owner, own_passwd) FROM stdin;
SCGDGCA 10.18.20.150    E   postgres    postgres
SCGSJ   10.18.20.150    E   postgres    postgres
SCGDPRE 10.18.20.150    E   postgres    postgres
SCGDSSA 10.18.20.150    E   postgres    postgres
SCGDAFI 10.18.20.150    E   postgres    postgres
SCGSDA  10.18.20.150    E   postgres    postgres
SCGDPRED    10.18.20.150    E   postgres    postgres
\.

注意:以前,我创建了一个名为postgres的数据库,用户为postgres而没有密码。

我希望我已经解释了!

4

1 回答 1

1

根据文件的提取,这是纯文本格式的转储。

它不应该被传递给 pg_restore 因为:

pg_restore 是一个实用程序,用于从由 pg_dump(1) 以非纯文本格式之一创建的存档中恢复 PostgreSQL 数据库

psql相反,它应该在连接到已经创建的数据库时直接馈送,大概是空的。这些对象似乎归 拥有postgres,所以应该这样做:

psql -U postgres -d yourdbname < dumpfile
于 2013-03-26T19:24:33.243 回答