Postgresql

是否可以在不先設置結構的情況下將表複製到 PostgreSQL 中?

  • March 30, 2022

我剛剛開始掌握 PostgreSQL 9.6。

我想知道是否有一種簡單的方法可以將 .csv 表添加到數據庫中,而無需先在psqlpgAdmin 或 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 文件創建表結構。

引用自:https://dba.stackexchange.com/questions/156278