Postgresql
如何在 PostgreSQL 上選擇兩個 CSV 文件/…?
我有兩個 CSV 文件,您可以將它們插入到以下
PostgreSQL
架構中。但是,我不能
\COPY
將數據放入表中。虛擬碼
- 讓
data_id=1
- 分別顯示 name 和
event_value
from data.csv和log.csv- 從 R 執行此請求並連接到 PostgreSQL
換句話說,虛擬碼但語法不正確
SELECT name, event_value FROM data, log WHERE data_id=1;
CSV 文件
我在 CSV 文件中用雙引號將標題括起來(執行緒PG COPY 錯誤:invalid input syntax for integer)。 data.csv其中兩個整數/SERIAL + 整數
"data_id", "event_value" 1, 777 1, 666 2, 111 4, 123 3, 324 1, 245
log.csv where integer/SERIAL + string 所以我把後一個用雙引號括起來
"data_id", "name" 1, "leo" 2, "leopold" 3, "lorem"
PostgreSQL
架構和工作流程
DROP TABLE IF EXISTS data, log; CREATE TABLE data ( data_id SERIAL NOT NULL, -- no primary key possible here, because possible have many events per data id event_value INTEGER NOT NULL ); CREATE TABLE log ( data_id SERIAL PRIMARY KEY NOT NULL, name INTEGER NOT NULL ); -- https://stackoverflow.com/a/2987451/54964 -- https://soleil4716.wordpress.com/2010/08/19/using-copy-command-in-postgresql/ -- joanolo, HEADER \COPY data FROM '/home/masi/Data/data.csv' DELIMITER ',' CSV HEADER; \COPY log FROM '/home/masi/Data/log.csv' DELIMITER ',' CSV HEADER;
工作流程虛擬碼
- 從乾淨的表開始(刪除舊表)並創建新表
- 將兩個 CSV 文件插入表中
- 現在執行 SELECT 並從 R 連接到 PostgreSQL
輸出
masi@masi:~$ psql -f schema.sql psql:schema.sql:1: NOTICE: table "data" does not exist, skipping DROP TABLE CREATE TABLE CREATE TABLE COPY 6 psql:schema.sql:14: ERROR: invalid input syntax for integer: " leo" CONTEXT: COPY log, line 2, column name: " leo"
基於執行緒PG COPY error: invalid input syntax for integer ,我不應該在 CSV 文件中出現錯誤。
作業系統:Linux Debian 8.7
PostgreSQL:9.4
相關:
R sqldf
執行緒中的 /… 方法如何通過 R sqldf/data.table/dplyr 選擇 CSV 文件?
錯誤很明顯,因為您打算將字元添加到整數定義的列。只需將日誌表中名稱列的數據類型從整數更改為 varchar(10)
想要的 SELECT 可以做為
-- https://unix.stackexchange.com/a/364970/16920 SELECT a.event_value, b.name FROM data a, log b WHERE a.data_id = 1 AND a.data_id=b.data_id;