当我使用 psql 使用 -f 选项或重定向输入运行脚本时,我收到虚假的错误消息。
该文件是通过 pg_dump 生成的,使用“-F p”选项,它会创建一个 sql 文件。
转储可以以脚本或存档文件格式输出。脚本转储是纯文本文件,其中包含将数据库重建到保存时的状态所需的 SQL 命令。要从这样的脚本恢复,请将其提供给 psql。即使在其他机器和其他架构上,脚本文件也可用于重建数据库;进行一些修改,即使在其他 SQL 数据库产品上也是如此。
这个sql文件的片段是:
-- Name: customer_info customer_info_pkey; Type: CONSTRAINT; Schema:
public; Owner: javautil
ALTER TABLE ONLY public.customer_info
ADD CONSTRAINT customer_info_pkey PRIMARY KEY (customer_info_id);
-- Name: customer customer_pkey; Type: CONSTRAINT; Schema: public;
Owner: javautil
ALTER TABLE ONLY public.customer
ADD CONSTRAINT customer_pkey PRIMARY KEY (customer_id);
我收到以下错误
ERROR: syntax error at end of input
LINE 1: ALTER TABLE ONLY public.customer_info
^
ERROR: syntax error at or near "ADD"
LINE 1: ADD CONSTRAINT customer_info_pkey PRIMARY KEY (customer_info...
^
ERROR: syntax error at end of input
LINE 1: ALTER TABLE ONLY public.customer
^
ERROR: syntax error at or near "ADD"
LINE 1: ADD CONSTRAINT customer_pkey PRIMARY KEY (customer_id);
答案 0 :(得分:1)
听起来您正试图将 pg_dump
的输出作为标准 SQL 脚本运行。为了使用由 pg_dump
生成的文件,它们需要与 pg_restore
结合使用,其文档为 here。
本质上,pg_dump
创建的文件格式是特殊的,以允许 pg_restore
选择性地恢复到数据库或输出。
答案 1 :(得分:0)
看来这个文件的换行符以某种方式被破坏了,并且 psql 误解了行尾的位置。请注意,它首先发送一个带有 ALTER TABLE ONLY public.customer
的命令,您会收到一条命令在那里结束的抱怨(这是有道理的:该命令不完整);然后它会发送另一个命令 ADD CONSTRAINT ...
,您会收到有关此问题的投诉。
我想知道您是否通过管道或类似方式过滤文件,在每行末尾放置一个 EOF。我们需要查看生成和使用备份文件的完整命令,以及有关这些命令运行环境的更多信息,才能确定。