公式ページに記載があるが、¥copy コマンドに対して variable interplation(or variable substitution)は使えない。
workaroundとして、コマンド文を組み立てる。
env.env
# Mac's psql install path.
SQL_EXEC=/usr/local/Cellar/libpq/[version]/bin/psql
# DB Connection Info.
POSTGRES_USER=postgres
POSTGRES_DB=postgres
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
DB_CONNECT_STRING="-U ${POSTGRES_USER} -d ${POSTGRES_DB} -h ${POSTGRES_HOST} -p ${POSTGRES_PORT}"
# FILE_NAMES
FILENAME=/Users/username/dev/shell/sample.dat
data_load.sh
# env.envの中身を読み込む
. ./env.env
SQL_FILE=copyFrom.sql
${SQL_EXEC} ${DB_CONNECT_STRING} -f ${SQL_FILE} -v inputFile=${FILENAME}
copyFrom.sql
\set filename :inputFile
--\copyコマンドに変数代入はできない
--\copy temp from :inputpath;
\set command '\\copy temp FROM ' :'filename'
:command