PostgreSQL导入不起作用

时间:2014-02-25 19:55:41

标签: sql sql-server postgresql import sql-import-wizard

我一直在尝试导入postgres转储(使用psql dbname < dump.sql及其变体,指定主机名和用户名等),但到目前为止我还没有成功。

我是Postgres的新手,所以我可能在这里错过了明显的东西。根据导入命令的输出,扩展plpgsql可能不存在。我是否希望在导入之前设置plpgsql扩展名?

以下是输出的前几行:

SET
ERROR:  unrecognized configuration parameter "lock_timeout"
SET
SET
SET
SET
CREATE EXTENSION
ERROR:  must be owner of extension plpgsql
ERROR:  could not open extension control file "/usr/share/postgresql/9.1/extension/hstore.control": No such file or directory
ERROR:  extension "hstore" does not exist
SET
SET
SET
ERROR:  relation "active_admin_comments" already exists
ERROR:  role "finalstep" does not exist
ERROR:  relation "active_admin_comments_id_seq" already exists
ERROR:  role "finalstep" does not exist
ALTER SEQUENCE
ERROR:  relation "admin_users" already exists
ERROR:  role "finalstep" does not exist

稍后,看起来它正在尝试执行一些内容作为sql查询(内容包含mathml标签):

ERROR:  syntax error at or near "</"
LINE 1: </mo> <msqrt>
        ^
ERROR:  syntax error at or near "&"
LINE 1: &nbsp;
        ^
ERROR:  syntax error at or near "</"
LINE 1: </mi> <mi>&alpha;

任何指针?我的Postgres版本是9.1(最初是9.3,但在看到错误消息后我将其降级为9.1)。

1 个答案:

答案 0 :(得分:3)

没有文件本身很难说。一些指示:

  • 如果可能的话,我会坚持使用版本 9.3 。许多改进超过9.1,您需要更多时间才能再次升级。 此外,第一条错误消息表明您需要 Postgres 9.3无论如何,因为GUC(配置设置)lock_timeout was introduced with Postgres 9.3.

  • 使用psql with the -f switch获取更详细的错误消息:

    psql dbname -f dump.sql
    

    -前面没有dbname -dbname ,我认为这只是一个错字?)

  • 如果您的安装没有中断,语言 plpgsql 应该不是问题。 Per documentation:

      

    在PostgreSQL 9.0及更高版本中,默认安装PL / pgSQL。

  • 这些错误消息表示在操作系统级别从contrib包中读取文件时出现问题。

    ERROR:  must be owner of extension plpgsql
    ERROR:  could not open extension control file "/usr/share/postgresql/9.1/extension/hstore.control": No such file or directory
    ERROR:  extension "hstore" does not exist
    
    • 您需要为postgresql-contrib-9.1等其他模块安装可选包postgresql-contrib-9.3(或hstore)。这个相关答案的细节:
      Error when creating unaccent extension on PostgreSQL

    • 启动Postgres的系统用户必须可以访问这些文件,通常是postgres(操作系统用户)。即,在shell中输入whoami时,答案应为postgres

    • 此外,您必须以超级用户身份执行bash命令,通常为postgres(数据库用户)。通常,如果未指定用户名,并且启用了IDENTPEER身份验证(默认),则会自动使用与OS用户匹配的数据库用户。这个相关答案的细节:
      Run batch file with psql command without password