【问题标题】:Load sql file data in to single table in postgres将sql文件数据加载到postgres中的单个表中
【发布时间】:2014-01-23 12:11:30
【问题描述】:

我的 sql 文件(single_table_data.sql) 只包含一张表的数据(我只从服务器转储了一张表)

现在我必须将这个 sql 文件插入到我数据库中的单个表中,

那么如何将 sql 文件导入 postgres 中的单个表?

编辑

例如,我有数据库名称SpeedData 和表名称CurrentTable,所以现在我想 将整个sql文件数据插入到这个表中CurrentTable

注意:sql文件只包含insert statements(甚至没有创建语句)

【问题讨论】:

标签: postgresql restore sql-insert


【解决方案1】:

来自the documentation

psql dbname < infile

这应该使用先前转储的名称创建一个新表并将所有数据插入其中。将dbname 替换为新数据库的名称,将infile 替换为包含转储的文件的名称/路径,在您的情况下(single_table_data.sql

如果转储只包含插入语句,则手动创建表,然后执行 psql -U your_username -d dbname -f single_table_data.sql

【讨论】:

  • 我的sql文件里面只有insert语句,连table create语句都没有,那么上面的命令怎么知道数据要插入到哪个表呢?我已经编辑了我的问题,请看一下
  • 哦,表名就不用提了吧?只是数据库,用户名就够了?
  • Jep,表名在insert语句中给出。
  • 问题是,如果dump文件中引用的表和你创建的不一样,导入会失败。但是您可以使用 ALTER TABLE name RENAME TO new_name 重命名表
【解决方案2】:

如果我理解正确,您想从文件创建表并填写数据。 正确的命令是

PGPASSWORD=<password> psql -f /home/.../filename.sql -h localhost -d database_name -U user_name

【讨论】:

    【解决方案3】:

    您可以简单地将 sql 转储数据导入您的 postgres 数据库。

    如果您已经创建了数据库,则无需执行第一步:-

    STEP=1

    打开终端然后运行以下命令来创建 postgres 数据库和用户:-

    sudo -u postgres psql

    postgres=# create database mydb;

    postgres=# create user myuser with encrypted password 'mypass';

    postgres=# grant all privileges on database mydb to myuser;

    STEP=2

    \c 用于选择你的数据库。

    postgres=# \c yourdatabasename

    \i 用于在数据库中导入转储数据。

    yourdatabasename=# \i path_of_your_dump_file 例如:-

    yourdatabasename=# \i /home/developer/projects/django_projects/db_dump.sql

    如果您在导入数据时遇到此类错误:-

    ERROR: role "yourusername" does not exist

    因此您可以使用以下命令将超级用户设置为您的“db_user/yourusername”:-

    postgres=# ALTER USER fusion WITH SUPERUSER;

    ALTER ROLE

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-12
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多