gpt4 book ai didi

sql - PostgreSQL 导入不工作

转载 作者:行者123 更新时间:2023-11-29 12:05:34 25 4
gpt4 key购买 nike

我一直在尝试导入一个 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)。

最佳答案

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

  • 如果可能的话,我会坚持使用 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:

    In PostgreSQL 9.0 and later, PL/pgSQL is installed by default.

  • 这些错误消息表明在操作系统级别从您的 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

    • 此外,您必须以 super 用户身份执行 bash 命令,通常是 postgres(数据库用户)。通常,如果您不指定用户名,并且启用了 IDENTPEER 身份验证(默认),则会自动使用与操作系统用户匹配的数据库用户。此相关答案中的详细信息:
      Run batch file with psql command without password

关于sql - PostgreSQL 导入不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22024777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com