前提
VBAのマクロで作成したCSVファイルを、PostgreSQLの社員マスタにCOPYコマンドでインポートします。下記URLを参考にして作成しました。
・【超簡単】ワンタッチでエクセルからCSV出力するVBAプログラム
・PostgreSQLでCSVファイルをインポート/エクスポートする方法
該当のソースコード
社員マスタのテーブルです。文字型は全てcharacterです。
t_社員マスタ
1CREATE TABLE public."t_社員マスタ" ( 2 "社員番号" character(8) NOT NULL, 3 "氏名" character(16), 4 "氏名カナ" character(24), 5 "所属コード" character(3), 6 "所属" character(30), 7); 8ALTER TABLE ONLY public."t_社員マスタ" 9 ADD CONSTRAINT "pk_t_社員マスタ" PRIMARY KEY ("社員番号");
作成したCSVファイルです。
社員番号 | 氏名 | 氏名カナ | 所属コード | 所属 |
---|---|---|---|---|
12345 | 田中太郎 | タナカ タロウ | 025 | 本社総務部 |
発生している問題
一度CSVをExcelで開き、「名前を付けて保存」⇒「CSV UTF-8(コンマ区切り)」で保存をしました。
そして、再びCOPYコマンドを実行したところ、社員番号で主キー制約しているので重複する社員番号は追加されないはずですが、実行されレコードが追加されてしまいました。
t_社員マスタの"社員番号"は8文字の固定長文字列型であり、全て5ケタの半角数字で後ろの3文字は空文字で埋まるようになっているので、"12345□□□"になるはずだと想定していました。
ところが、COPY実行後追加されたレコードを確認したところ、"12345□□"と7文字になっていました。
実現したいこと
5ケタの数字の後ろの3文字分埋めるようにしたいです。
CSVを作成する段階で固定長を8文字に設定するツールがあるのか、COPYコマンドで必要な設定が抜けているのか、アドバイスいただけると幸いです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
PC:Windows11
Excelのバージョン:Microsoft365 Excel
PostgreSQLのバージョン:9.0.1
PSqlEditのバージョン:5.2.3.9

回答1件
あなたの回答
tips
プレビュー