teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

訂正

2016/10/01 17:12

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -28,9 +28,7 @@
28
28
  psql hogedb<<EOD
29
29
  \set inputfile stdin
30
30
  copy hoge from :inputfile with csv HEADER DELIMITER ',';
31
- header_1,header_2,header_3
32
- data1,data2,data3
31
+ $(cat hoge.csv)
33
- ・・・・・
34
32
  \.
35
33
  EOD
36
34
  ```

5

訂正

2016/10/01 17:12

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -11,7 +11,7 @@
11
11
  > ※なぜか「末尾に:がついているのも気になりますが・・・」
12
12
 
13
13
  copyはpostgresサーバへのコマンドSQL文と同じなので、;が必要です。
14
- \copyはpsqlへのコマンドなのでsetと同様に不要です。
14
+ \copyはpsqlクライアントへのコマンドなのでsetと同様に不要です。
15
15
  copyはリモートサーバで実行され入力ファイルは、そのサーバで参照可能な場所になります。
16
16
  stdin,stdoutはサーバがクライアントのpsqlに対しての要求になりクライアントの入出力が可能となります。
17
17
 

4

追加

2016/10/01 16:58

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -20,4 +20,17 @@
20
20
  #!/bin/sh
21
21
  inputfile=hoge.csv
22
22
  psql hogedb -c"\copy hoge from '$inputfile' with csv HEADER DELIMITER ',';"
23
+ ```
24
+
25
+ 要望されているのと違いますがstdinを使った場合
26
+ ```bash
27
+ #!/bin/sh
28
+ psql hogedb<<EOD
29
+ \set inputfile stdin
30
+ copy hoge from :inputfile with csv HEADER DELIMITER ',';
31
+ header_1,header_2,header_3
32
+ data1,data2,data3
33
+ ・・・・・
34
+ \.
35
+ EOD
23
36
  ```

3

追加

2016/10/01 16:25

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -13,4 +13,11 @@
13
13
  copyはpostgresサーバへのコマンドSQL文と同じなので、;が必要です。
14
14
  \copyはpsqlへのコマンドなのでsetと同様に不要です。
15
15
  copyはリモートサーバで実行され入力ファイルは、そのサーバで参照可能な場所になります。
16
- stdin,stdoutはサーバがクライアントのpsqlに対しての要求になりクライアントの入出力が可能となります。
16
+ stdin,stdoutはサーバがクライアントのpsqlに対しての要求になりクライアントの入出力が可能となります。
17
+
18
+
19
+ ```bash
20
+ #!/bin/sh
21
+ inputfile=hoge.csv
22
+ psql hogedb -c"\copy hoge from '$inputfile' with csv HEADER DELIMITER ',';"
23
+ ```

2

追加

2016/10/01 03:23

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -12,4 +12,5 @@
12
12
 
13
13
  copyはpostgresサーバへのコマンドSQL文と同じなので、;が必要です。
14
14
  \copyはpsqlへのコマンドなのでsetと同様に不要です。
15
- copyはリモートサーバで実行され入力ファイルは、そのサーバで参照可能な場所になります。
15
+ copyはリモートサーバで実行され入力ファイルは、そのサーバで参照可能な場所になります。
16
+ stdin,stdoutはサーバがクライアントのpsqlに対しての要求になりクライアントの入出力が可能となります。

1

追加

2016/10/01 03:00

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -5,4 +5,11 @@
5
5
  ```
6
6
 
7
7
  \copyで使えないオプションが使えます。
8
- 実はstdinとstdoutは\copyコマンドでも同様に可能です。
8
+ 実はstdinとstdoutは\copyコマンドでも同様に可能です。
9
+
10
+
11
+ > ※なぜか「末尾に:がついているのも気になりますが・・・」
12
+
13
+ copyはpostgresサーバへのコマンドSQL文と同じなので、;が必要です。
14
+ \copyはpsqlへのコマンドなのでsetと同様に不要です。
15
+ copyはリモートサーバで実行され入力ファイルは、そのサーバで参照可能な場所になります。