[英]How do I copy the table structure of a postgres table into a different postgres database without the data
[英]How do I copy data from a CSV dump into a PSQL database with a different structure?
我目前正在嘗試將SQLite3數據庫復制到具有DIFFERENT結構的PostgreSQL數據庫中。 我怎么做?
到目前為止,我做了什么:
問題:
如果表和列的名稱與原始名稱不同,我不知道如何導入/復制數據。 例如,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.