假设我有两条路径,/data/dev
和
/data/prod
。开发时,我想使用dev
目录,而在产品中,我想使用prod
目录。
我需要以一定间隔(upload_to_tables.sql
)上传数据:
file := :basedir || 'file.csv';
COPY my_table FROM :file WITH (FORMAT csv);
我尝试运行此$ environment=dev; psql -d my_database -v basedir="'/data/$environment'" -f upload_to_tables.sql
我收到此错误:
2019-07-15 09:24:52.302 CDT [90820] ERROR: syntax error at or near "file" at character 1
如何设置需要动态加载这些数据的目录?
答案 0 :(得分:1)
创建一个显示文件内容的shell脚本,例如
$cat ts.sh
#!/bin/bash
basedir=/data/dev
file=${basedir}"/file.csv"
cat ${file}
现在,\copy
或COPY
可以使用PROGRAM
选项
\copy t from program 'ts.sh' with delimiter ',' CSV
答案 1 :(得分:1)
您距离很近。以下应该起作用。
$ environment=dev && psql -d my_database -v basedir="/data/$environment/" -f upload_to_tables.sql
\set file :basedir 'file.csv'
COPY my_table FROM :'file' WITH (FORMAT csv);
通常,在设置变量时,您不必理会引号。您可以使用:'var'
作为字符串或使用:"var"
作为标识符来访问变量的内容。
要连接变量并将其存储为新变量,您只需在\set var value
中的变量名称后列出多个值即可。