簡體   English   中英

如何將數據從CSV轉儲復制到具有不同結構的PSQL數據庫中?

[英]How do I copy data from a CSV dump into a PSQL database with a different structure?

我目前正在嘗試將SQLite3數據庫復制到具有DIFFERENT結構的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上運行。

您無法使用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 )而不是public ,則可以使所有操作變得更加容易,而只需使用普通insert語句復制數據即可:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM