Postgresql
是否可以在不先設置結構的情況下將表複製到 PostgreSQL 中?
我剛剛開始掌握 PostgreSQL 9.6。
我想知道是否有一種簡單的方法可以將 .csv 表添加到數據庫中,而無需先在
psql
pgAdmin 或 pgAdmin 中創建表結構?或者……我以前沒有使用過腳本,但如果有人可以推荐一個並讓我快速瀏覽一下,我將非常感激。
如果您可以忍受所有列都是文本並且 CSV 文件至少有一個帶有列名的標題行,那麼一個醜陋的解決方案可能是:
創建具有單列的表。然後將 CSV 文件的第一行導入該表。然後,您可以獲取名稱列表並從中生成 CREATE TABLE 語句。
就像是:
create table header_names (header_line text);
然後將第一行導入該表。
像(未經測試!):
\copy header_names from (program 'head -n 1 data.txt')
\copy
並且COPY
沒有辦法限制導入的行數,所以你需要用它head
來獲取第一行。然後使用:
select 'create table import ('||string_agg(col_name||' text', ', ')||');' from header_names cross join lateral unnest(string_to_array(header_line,',')) as x(col_name);
該
string_to_array()
函式的第二個參數是 CSV 文件的分隔符。假設你有一個像這樣的標題:
id,first_name,last_name
以上將生成:
create table import (id text, first_name text, last_name text);
CSV 不包含數據類型資訊,因此不可能從 CSV 文件創建表結構。