postgresql - 如何从 postgresql 导出多个 csv 文件以进行循环查询?
问题描述
我有 100 个州代码。我需要在这样的查询中使用它们:
select *
from public.clients
where state = '01'
并获得 100 个不同的 .csv 文件。我没有超级用户权限,所以如果我做对了,我只能\copy
在 psql 命令行中完成。但我不明白如何正确使用它。
我试着让它像这样:
DO
$do$
declare
i text;
arr text[] := array(
select distinct state
from public.clients c
where state is not null
order by state);
BEGIN
FOREACH i IN ARRAY arr
LOOP
EXECUTE format($x$\COPY (
SELECT *
FROM public.clients c
WHERE c."state" = %1$s)
TO 'G:\Desktop\states\.%1$s.out.csv' WITH DELIMITER ',' CSV HEADER$x$, i);
END LOOP;
END
$do$
但我得到了ERROR: syntax error at or near "\"
,我认为这不是最后一个错误,因为我不确定这个WHERE c."state" = %1$s
和这个TO 'G:\Desktop\states\.%1$s.out.csv' WITH DELIMITER ',' CSV HEADER$x$, i);
解决方案
DO 将其程序发送到服务器以运行。由于\copy
是psql
元命令,服务器将不知道如何运行它。所以你不能这样做。
您也不能使用元\gexec
命令,因为它只能用于运行 SQL 命令,而不是其他元命令。
因此,您可以编写一个脚本(例如,perl 或 python,或 bash)来打印出一系列\copy...
然后将其通过管道输入psql
,或将其发送到文件并执行psql -f file.sql
推荐阅读
- javascript - 如何接收来自使用 p-fileUpload 的 url 属性指定的 API 的响应?
- flutter - 如何将导航代码添加到颤振列表视图?
- php - Symfony 包错误 NotFoundException:尝试从命名空间“Toiba\FullCalendarBundle”加载类“FullCalendarBundle”
- sql - 如何使用带条件的 SQL LAG 函数
- javascript - 如何使用 chartjs 创建浮动图表?
- internet-explorer - Woocommerce 无法在 Internet Explorer 中将产品添加到购物车
- python - Tkinter 不等待函数内部的用户输入
- vue.js - D3 VUEjs 添加 Attr 和 or 调用
- react-native - 我正在尝试添加 Instagram 类型过滤器以使用 React-native 为我的图像添加一些效果?
- date - 将格式从日期时间更改为 DDMMYYP10