问题描述
我下面有声明和复制命令
with output01 as
(select * from (
select name,case
when column1 is not null and lower(column1) in ('point1','point2','point3','point4') then 3456
else null end column1Desc,case
when column2 is not null and lower(column2) in ('point1','point4') then 2456
else null end column2Desc,column3,column4),output02 as
(select * from (
select name,output3 as (SELECT * FROM output01 UNION ALL SELECT * FROM output02)
\copy (select * from output3) to '/usr/share/output.csv' with CSV ENCODING 'UTF-8' DELIMITER ',' HEADER;
我正在跟踪错误
错误:关系“ tab3”不存在
解决方法
所有psql
反斜杠命令都必须写在一行上,因此不能与\copy
一起使用多行查询。唯一的解决方法是使用该查询创建一个(临时的)视图,然后在\copy
命令中使用该视图。
大致情况:
create temporary view data_to_export
as
with cte as (..)
select *
from cte
;
\copy (select * data_to_export) to ...
,
您收到此错误,是因为您在不同的语句中运行CTE
查询和copy
命令。考虑到您的with
查询工作正常,您应该像下面这样编写copy
语句:
\copy (WITH tab1 as (Your SQL statement),tab2 as ( SELECT ... FROM tab1 WHERE your filter),tab3 as ( SELECT ... FROM tab2 WHERE your filter)
SELECT * FROM tab3) to '/usr/share/results.csv' with CSV ENCODING 'UTF-8' DELIMITER ',' HEADER;