我试图在Postgres中创建一个临时表(以加快加入速度,因为在整个会话期间会有很多类似的查询)。将在会话开始时调用的SQL如下:
CREATE TEMPORARY TABLE extended_point AS
SELECT (
point.id,
local_location,
relative_location,
long_lat,
region,
dataset,
region.name,
region.sub_name,
color,
type)
FROM point, region, dataset
WHERE point.region = region.id AND region.dataset = dataset.id;
表的点有列id :: int,region :: int,local_location :: point,relative_location :: point,long_lat:point(经度,纬度)。
Region的列为id :: int,color :: int,dataset :: int,name :: varchar,sub_name :: varchar。
Dataset的列为id :: int,name :: varchar,type:varchar。
运行此命令时,收到错误消息:[25P02] ERROR:当前事务中止,命令被忽略,直到事务块结束。
作为一方,命令在PyCharm中执行,并且是Python项目的一部分。
有什么建议吗?
提前致谢:)
答案 0 :(得分:2)
这两个查询之间存在重要差异:
select 1, 'abc';
select (1, 'abc');
第一个查询返回一行,其中两个列的值为1和'abc'。第二行返回一行一个列的伪类记录,其值为(1,'abc')。
您的查询尝试创建一个包含一列伪类记录的表。这是不可能的,应该以
结束ERROR: column "row" has pseudo-type record
SQL state: 42P16
只需从查询中删除括号即可。 正如a_horse所述,[25P02] ERROR不适用于相关查询。
顺便说一句,我的建议:永远不要将关键字用作表/列名称。