解決したい問題
\COPYコマンドでTSVファイルのデータをインポートする方法をご教授いただきたいです。
一応の解決方法
TSVファイルをあきらめ、CSVファイルに変更しました。
下記で一応動きました。。
sql
1\encoding utf8 2 3drop table access_log; 4\i src/access_log.ct 5\copy access_log from 'src/access_log.bz2.csv' with csv header null '' delimiter ',' quote e'"';
tsv
1"www.hoge.com"~"-"~"-"~"04/Sep/2018:20:38:28 +0900"~"GET"~"/index.php?q=abc&s=def%3Aghi""~"200"~"144155"~"-"~"-" 2"www.fuga.net"~"-"~"-"~"06/Sep/2018:01:37:44 +0900"~"GET"~"/index.php?id=123&q=abc def"~"301"~"294"~"a " a"~"Opera/9.27" 3
バッチファイル実行後のメッセージ
cmd
1C:\Users\user\Desktop\sql>call .\parameters-windows.bat 2 3C:\Users\user\Desktop\sql>set PGHOST=localhost 4 5C:\Users\user\Desktop\sql>set PGPORT=5432 6 7C:\Users\user\Desktop\sql>set PGDATABASE=postgres 8 9C:\Users\user\Desktop\sql>set PGUSER=postgres 10 11C:\Users\user\Desktop\sql>set PSQL="C:\Program Files\PostgreSQL\9.4\bin\psql" 12 13C:\Users\user\Desktop\sql>"C:\Program Files\PostgreSQL\9.4\bin\psql" -f load.sql 14DROP TABLE 15CREATE TABLE 16COPY 0 17 18C:\Users\user\Desktop\sql>pause 19続行するには何かキーを押してください . . . 20
バッチファイル
bat
1 2call .\parameters-windows.bat 3%PSQL% -f load.sql 4pause 5 6rem parameters-windows.bat 7set PGHOST=localhost 8set PGPORT=5432 9set PGDATABASE=postgres 10set PGUSER=postgres 11set PSQL="C:\Program Files\PostgreSQL\9.4\bin\psql" 12
sql
1\encoding utf8 2 3drop table access_log; 4\i src/access_log.ct 5\copy access_log from 'src/access_log.tsv' WITH CSV DELIMITER E'~' header null '' QUOTE '"'; 6
ct
1create table access_log 2( a text 3, b text 4, c text 5, d text 6, e text 7, f text 8, g text 9, h text 10, i text 11, j text 12);
環境
- Windows10
- PostgresSQL 9.4
追加で試したこと
パターン1(pattern_1.tsv)
\copy access_log from 'src/pattern_1.tsv' ( format text, delimiter ' ', quote '"' ); 2018-12-03 08:02:24 JST ERROR: COPYの引用符はCSVモードでのみ使用できます 2018-12-03 08:02:24 JST ステートメント: COPY access_log FROM STDIN ( format text, delimiter ' ', quote '"' );
パターン2(pattern_1.tsv)
2018-12-03 08:17:46 JST ERROR: CSV引用符が閉じていません 2018-12-03 08:17:46 JST コンテキスト: access_logのCOPY。行番号 1: "www.hoge.com - - 04/Sep/2018:20:38:28 +0900 GET /index.php?q=abc&s=def%3Aghi" 200 144155 - - www.fug..." 2018-12-03 08:17:46 JST ステートメント: COPY access_log FROM STDIN ( format csv, delimiter ' ', quote '"' );
パターン3(pattern_2.tsv)
2018-12-03 08:23:18 JST ERROR: 列"h"のデータがありません 2018-12-03 08:23:18 JST コンテキスト: access_logのCOPY。行番号 1: ""www.hoge.com" "-" "-" "04/Sep/2018:20:38:28 +0900" "GET" "/index.php?q=abc&s=def%3Aghi"" "200" "144..." 2018-12-03 08:23:18 JST ステートメント: COPY access_log FROM STDIN ( format csv, delimiter ' ', quote '"' );
pattern_1.tsv
tsv
1www.hoge.com - - 04/Sep/2018:20:38:28 +0900 GET /index.php?q=abc&s=def%3Aghi" 200 144155 - - 2www.fuga.net - - 06/Sep/2018:01:37:44 +0900 GET /index.php?id=123&q=abc def 301 294 a a Opera/9.27
pattern_2.tsv
tsv
1"www.hoge.com" "-" "-" "04/Sep/2018:20:38:28 +0900" "GET" "/index.php?q=abc&s=def%3Aghi"" "200" "144155" "-" "-" 2"www.fuga.net" "-" "-" "06/Sep/2018:01:37:44 +0900" "GET" "/index.php?id=123&q=abc def" "301" "294" "a " a" "Opera/9.27"
参考サイト
PostgreSQLのcopyではまった
回答を記載した後ですが、実行するとどのようなメッセージが出ているのでしょうか?
CHERRYさん、ご回答ありがとうございます。実行後のメッセージを追記しました。
https://teratail.com/questions/161180 とどう違うの。回答が得られないからといって何度も同じような質問を投稿していいわけじゃないよ。
m6uさん、ご回答をいただいたのに失礼なことをして大変申し訳ございません。今回はエラーログも無いですし別物との認識をしておりました。今後から気を付けるようにいたします。
回答1件
あなたの回答
tips
プレビュー