是否可以在PSQL控制台导出文件中,当前日期在文件名末尾? 导出文件的名称应该是这样的 table_20140710.csv 是否可以动态执行此操作? - 日期的格式可能与上述不同,但并不重要。
这就是我的意思:
\set curdate current_date
\copy (SELECT * FROM table) To 'C:/users/user/desktop/table_ ' || :curdate || '.csv' WITH DELIMITER AS ';' CSV HEADER
答案 0 :(得分:3)
动态构建\copy
命令并将其存储在文件中。然后使用\i
首先设置元组仅输出
\t
将输出设置为文件
\o 'C:/users/user/desktop/copy_command.txt'
构建\copy
命令
select format(
$$\copy (select * from the_table) To 'C:/users/user/desktop/table_%s.csv' WITH DELIMITER AS ';' CSV HEADER$$
, current_date
);
将输出恢复为stdout
\o
从文件
执行生成的命令\i 'C:/users/user/desktop/copy_command.txt'
答案 1 :(得分:0)
不扩展变量的 orig_df <- as.data.frame(orig_df)
included_rows <- rep(FALSE, nrow(orig_df))
seen_ids <- c()
for(i in 1:nrow(orig_df)){
# Skip row if we have seen either ID already
#if(orig_df[i, 'New_ID'] %in% seen_ids) next
if(orig_df[i, 'New_ID.1'] %in% seen_ids) next
# If both ids are new, we save them as seen and include the entry
seen_ids <- c(seen_ids, orig_df[i, 'New_ID'] , orig_df[i, 'New_ID.1'] )
included_rows[i] <- TRUE
}
filtered_df <- orig_df[included_rows,]
元命令的例外是(同时)documented
与大多数其他元命令不同,该行的其余部分始终被视为 \copy 的参数,并且在参数中既不执行变量插值,也不执行反引号扩展。
要解决此问题,您可以分多个步骤构建、存储和执行命令(类似于 Clodoaldo Neto 提供的解决方案):
structure(list(New_ID = c("a", "a", "a", "d", "d", "d"), New_ID.1 = c("a",
"b", "c", "d", "e", "f")), class = "data.frame", row.names = c(NA,
-6L))
a|a
a|b
a|c
d|d
d|e
d|f
有了这个,您需要加倍(转义)嵌入的元命令中的 \copy
。请记住,\set filename 'my fancy dynamic name'
\set command '\\copy (SELECT * FROM generate_series(1, 5)) to ' :'filename'
:command
将所有进一步的参数连接到第二个参数,因此在参数之间引用空格。您可以在执行前使用 \
显示命令 (\set
)。
作为本地 :command
命令的替代方法,您还可以使用 SQL 构建命令服务器端(最佳方式取决于动态内容的来源):
\echo :command