【问题标题】:How do I copy data from a CSV dump into a PSQL database with a different structure?如何将 CSV 转储中的数据复制到具有不同结构的 PSQL 数据库中?
【发布时间】:2016-05-19 09:08:13
【问题描述】:

我目前正在尝试将 SQLite3 数据库复制到具有不同结构的 PostgreSQL 数据库中。我该怎么做?

到目前为止我做了什么:

  1. 我转储了 SQLite 数据库,并为所有表创建了带有标题的 CSV 文件。
  2. 然后我创建了一个新的 PSQL 数据库,该数据库具有适合我需要的新表结构。
  3. 我还使用旧的 SQLite 表结构创建了一个 PSQL 数据库,并从上述 CSV 文件中导入了数据,因此我可以访问两个数据库,一个具有旧架构的数据库和一个具有新架构的数据库,以防万一我需要它。

问题:

如果表和列名称与原始名称不同,我不知道如何导入/复制数据。 例如。 SQLite 数据库和 CSV 表“关键字”具有以下结构:

ID, CreatedBy, CreatedByUserId, CreatedOn, ModifiedBy, ModifiedByUserId, ModifiedOn, Name, Notes, Protected, ReservedData

新的 PSQL 数据库对于不同命名的表“关键字”具有以下结构:

KeywordsID, CreatedOn, Keyword, ModifiedOn, Notes

显然很简单

COPY keywords(
            keywordsid, createdon, keyword, notes)
FROM '/home/user/Desktop/bib_csv/keywords.csv' DELIMITER ',' CSV;

不会工作。

背景:

原始数据库是由名为 Citavi 的书目程序创建的。它最初是一个 Microsoft Access 数据库,后来由程序本身移植到 SQLite3,显然数据库现在包含一些错误,阻止大多数程序协助导出到 PSQL,这意味着我必须手动完成。

我想在线访问数据库,但出于多种原因,我希望它在 PostgreSQL 而不是 SQLite 上运行。

【问题讨论】:

  • 虽然没有错,但您对“模式”一词的使用有点令人困惑。一般来说,术语“模式”是指一个命名空间,例如一个表,而不是关于完整的数据库对象集及其各自的定义。
  • 我称它为“结构”,但后来看到它在 pgAdmin 中被列为“模式”。很高兴知道其中的区别,谢谢。

标签: postgresql csv database-schema import-from-csv


【解决方案1】:

您不能使用copy 选择性地导入列。如果您不想使用其他工具,最简单的方法是创建一个具有原始结构的临时表,然后将COPY 放入该表中,然后使用insert 语句仅复制一些列:

create table keywords_old
(
  ID ..., 
  CreatedBy ..., 
  CreatedByUserId ..., 
  CreatedOn, ...
);

COPY keywords_old
FROM '/home/user/Desktop/bib_csv/keywords.csv' DELIMITER ',' CSV;

insert into keywords (keywordsid, createdon, keyword, notes)
select id, createdon, name, notes
from keywords_old;

另一种选择是仅从旧数据库中导出选定的列:

COPY keywords (id, createdon, name, notes)
  TO '/home/user/Desktop/bib_csv/keywords.csv' DELIMITER ',' CSV;

然后您可以将该文件导入新数据库。


如果您将旧数据导入相同 数据库但导入不同的架构(例如old_data)而不是@ 987654327@ 你可以使用普通的insert 语句复制数据:

insert into public.keywords (keywordsid, createdon, keyword, notes)
select id, createdon, name, notes
from old_data.keywords;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多