PostgreSQL:从 psql 传递路径以动态创建 table 名称
PostgreSQL: pass path from psql to create table name dynamically
假设我有两条路径,/data/dev
和
/data/prod
。开发时想用dev
目录,prod中想用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
如何以动态方式指定需要从中加载这些数据的目录?
创建一个 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
你们很接近。以下应该有效。
$ 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
.
中的变量名称后列出多个值即可
假设我有两条路径,/data/dev
和
/data/prod
。开发时想用dev
目录,prod中想用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
如何以动态方式指定需要从中加载这些数据的目录?
创建一个 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
你们很接近。以下应该有效。
$ 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
.