postgresql - PostgreSQL - 将输出导出到 CSV
问题描述
我想将查询的表导出到 CSV 文件。这里写的查询语法不是我的代码。我从我的同事那里得到的。我对 PostgreSQL 的了解非常少,也不知道如何修改代码。请给我一个可以将查询表导出为 CSV 的工作代码。只要是 CSV 格式,格式并不重要,因为我可以使用 Python 重新格式化表格。
WITH es_events AS
(SELECT *
FROM dblink('foreign_rs_server', $EXT$
-- Note that since device_id and register_id are known and singular,
-- they are replaced as constant values rather than retrieved.
-- As a distributed columnar store, Redshift is most performant when fewer columns are retrieved.
SELECT DATE("dt")::timestamp as dt, value, 2777 as device_id, 1343 as register_id
FROM "es_events" AS "events"
WHERE "events"."event_type" = 0
AND register_id = 1343
AND device_id=2777
AND dt>='2018-12-01T00:00:00'
AND dt<'2018-12-02T00:00:00'
ORDER BY DATE("dt") ASC; $EXT$) AS es_events (dt TIMESTAMP WITH TIME ZONE, value DOUBLE PRECISION, device_id INTEGER, register_id INTEGER)),
register_versions AS
(
SELECT
r.*,
r.valid_at as valid_start,
CASE
WHEN r2.valid_at IS NULL THEN '2020-01-01'
ELSE r2.valid_at
END as valid_end
FROM registers r
LEFT JOIN registers r2 ON r2.id=r.id AND r2.valid_at>r.valid_at
ORDER BY id ASC
)
SELECT "dt",
r.name,
"events"."value"*r.scaling as scaled_value,
r.units_of_measure
FROM "es_events" AS "events"
JOIN register_versions r ON r.id = events.register_id AND (r.valid_start <= dt AND r.valid_end > dt)
JOIN device_asset_mapping dam ON dam.device_id=events.device_id AND dam.active
ORDER BY dam.asset_id, dt ASC
解决方案
你可以像这样使用终端命令:
COPY ( your query inside ) TO 'C:\tmp\persons_email_db.csv' DELIMITER ',' CSV;
或者您可以简单地使用一些数据库工具(例如 navicat 或 dbeaver)在上面运行您的查询并将结果导出到 csv
推荐阅读
- spring-boot - 我们可以通过 xml 将 appenders 添加到 lombok @Log4j
- apache-flink - Flink TableAPI 中的后续窗口分组导致 RuntimeException
- python - 用点重新缩放零矩阵
- arrays - 如何在 MQL5 CopyBuffer 函数中传递多维数组?
- java - 如何使用 bytebuddy 在私有变量中设置注解@Value
- kubernetes - Kubeflow - 无法加载仪表板菜单链接
- css - 有什么方法可以强制成帧器运动使用宽度而不是变换?
- python - 使用健身房创建新的多智能体环境
- ajax - c#Net Core方法执行多次-创建多个线程
- javascript - 将日期设置为文本的 html 表导出到 Excel