Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 临时表是否丢失所有行,除非单独选择?_Postgresql - Fatal编程技术网

Postgresql 临时表是否丢失所有行,除非单独选择?

Postgresql 临时表是否丢失所有行,除非单独选择?,postgresql,Postgresql,PostgreSQL新手,有一些问题。我有一套很长的代码,使用了很多临时表,其中一个“主”临时表正在使用其他每个临时表的内容进行更新。但是,其中一个表的工作方式与其他表不同。下面是它的代码: --cargo and dwt creation drop table if exists t_cargo; create temp table t_cargo as select a.*, b.dwt, (b.dwt * .98) as cargo from t_vesse

PostgreSQL新手,有一些问题。我有一套很长的代码,使用了很多临时表,其中一个“主”临时表正在使用其他每个临时表的内容进行更新。但是,其中一个表的工作方式与其他表不同。下面是它的代码:

--cargo and dwt creation
drop table if exists t_cargo;
create temp table t_cargo as
select
    a.*,
    b.dwt,
    (b.dwt * .98) as cargo
from
    t_vessel_list a
join
     tanker b on a.imo = b.imo;
--end

--select * from t_cargo

--update cargo and dwt
UPDATE t_vessel_list
SET metric_tons = b.dwt,
vessel_cargo = b.cargo
FROM t_cargo b
WHERE t_vessel_list.vessel = b.vessel;
--end
此表不会在查询中的任何其他位置调用,但在作为整个查询的一部分运行时,此表没有数据。如果单独运行(如中所示,高亮显示,然后运行),它将只包含数据并正确更新数据。否则,它是空的,更新结果为空列

根据请求,下面是第二个临时表,它位于查询中,可以正常工作:

--create a table for draught data, separate because joins will filter
drop table if exists t_ais_draught;

create temp table t_ais_draught as
select distinct
    a.*,
    b.date,
    b.destination,
    b.poi,
    b.draught
from
    t_vessel_list a
join lateral
    (
    select * from asvt_position b where a.vessel = b.vessel order by 2 desc 
    limit 1
    ) b on true;
--end


--update draughts
UPDATE t_vessel_list
set v_draught = b.draught
FROM t_ais_draught b
where t_vessel_list.vessel = b.vessel;
--end
这组代码可以工作,并且与第一组代码的差异最小。查询中的所有代码看起来要么像第一个临时表代码,要么像第二个临时表代码,除了我在顶部链接的代码外,其他代码都可以正常工作

**经过更多的尝试和错误,我发现解决方案是将临时表和更新调用移动到查询的后面部分。这样做之后,它看起来不会干扰查询的任何其他部分,但我仍然不明白为什么它一开始就不起作用。如前所述,t_cargo表在查询中的任何地方都不会调用发布的代码之外的内容


有人能解释一下发生了什么事吗?

一定是哪里出了错。临时表不仅仅会丢失数据。您的代码似乎还可以,但您的问题并不清楚。你能写两个分开的代码并显示哪一个工作,哪一个不工作吗。还提供一些样本数据,以便我们可以尝试重现问题。尝试在@JuanCarlosOropeza中创建一个示例。我添加了第二个有效的代码。我猜select在创建表时没有任何数据,因为您正在使用时态表。检查创建顺序。您还可以使用您知道有数据的实际表来测试它。如果您得到了更新,那么您就知道问题出在哪里了。