在postgres中创建临时表

时间:2015-05-17 08:27:21

标签: sql postgresql temp-tables

我试图在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项目的一部分。

有什么建议吗?

提前致谢:)

1 个答案:

答案 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不适用于相关查询。

顺便说一句,我的建议:永远不要将关键字用作表/列名称。