Sql 为什么不是';我的表格不是在Postgres中创建的吗?

Sql 为什么不是';我的表格不是在Postgres中创建的吗?,sql,postgresql,postgresql-9.3,create-table,Sql,Postgresql,Postgresql 9.3,Create Table,我的最终目标是完成一个需要使用临时表的Postgresql函数。由于语法错误,尝试创建临时表本身不起作用。我很确定我的语法是正确的,那么有人能告诉我我做错了什么吗 在PGAdmin III中,我打开一个查询窗口并输入以下内容: create temporary table tmp_parts ( id serial not null, part_number character varying(255) not null, max_price numeric(19,2) not nu

我的最终目标是完成一个需要使用临时表的Postgresql函数。由于语法错误,尝试创建临时表本身不起作用。我很确定我的语法是正确的,那么有人能告诉我我做错了什么吗

在PGAdmin III中,我打开一个查询窗口并输入以下内容:

create temporary table tmp_parts
(
  id serial not null,
  part_number character varying(255) not null,
  max_price numeric(19,2) not null
);
当我运行Explain Query功能来测试语法时,出现以下错误:

ERROR:  syntax error at or near "serial"
LINE 3:   id serial not null,
             ^
********** Error **********

ERROR: syntax error at or near "serial"
SQL state: 42601
Character: 98

我做错了什么?

serial
实际上不是postgres中的一种类型,它是

id integer NOT NULL DEFAULT nextval('tmp\u parts\u seq')

我的“猜测”是,要么它不喜欢重复
notnull
,要么(更有可能?)你不能有一个临时数字序列,因为它们是临时的

这比我们想象的要简单:


显示语法时,您需要删除括号并以分号结束语句。

您不能在
解释中使用
创建表
。仅允许以下情况:

任何选择、插入、更新、删除、值、执行、声明或 创建表作为语句,您希望看到其执行计划


当我在Postgres 9.3中运行您的查询时,它运行得很好。@DJTripleThreat如果您想“测试语法”,换句话说,执行查询时不需要对数据库进行意外修改,但同时如果语法正确或错误,您可以在事务中执行并回滚它。即:
启动事务/*然后查询*/回滚@Gabriel's留言谢谢!我几分钟前就知道了。这是非常有用的。这也是我所想的,但简单地将
串行
更改为
整数
也会得到类似的结果。哇,真糟糕!在我将代码作为函数提交之前,我想检查代码是否会做一些不可靠的事情。这有点令人沮丧。感谢您的回答。原因是没有与创建表相关联的执行计划,除非有DML查询组件,就像
create table。。。作为…
。因此,即使它是有效的语法,也没有计划解释。