Thread: BUG #6376: Cannot prepare a "CREATE TABLE" statement, error message is unhelpful

BUG #6376: Cannot prepare a "CREATE TABLE" statement, error message is unhelpful

From
agserm@gmail.com
Date:
The following bug has been logged on the website:

Bug reference:      6376
Logged by:          Ansel Sermersheim
Email address:      agserm@gmail.com
PostgreSQL version: 9.1.2
Operating system:   Linux & Win32
Description:=20=20=20=20=20=20=20=20

Attempting to prepare a CREATE TABLE statement fails with a syntax error:

postgres=3D# select version();
                                                version=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20
---------------------------------------------------------------------------=
----------------------------
 PostgreSQL 9.1.2 on x86_64-unknown-linux-gnu, compiled by gcc-4.6.real
(Debian 4.6.2-5) 4.6.2, 64-bit
(1 row)

postgres=3D# prepare foo as create table bar (c integer);
ERROR:  syntax error at or near "create"
LINE 1: prepare foo as create table bar (c integer);
                       ^

This error message does not in any way indicate that one cannot prepare a
create table statement.

It appears that PostgreSQL does not support this operation, but I cannot
find any documentation that indicates why, or indeed if this is
intentional.

At the very least an error message indicating that CREATE TABLE is not
eligible for preparation would have been nice.

This behavior seems to be identical both on Linux and Win32.

Thanks for reading,

Ansel Sermersheim

Re: BUG #6376: Cannot prepare a "CREATE TABLE" statement, error message is unhelpful

From
"Kevin Grittner"
Date:
<agserm@gmail.com> wrote:

> postgres=# prepare foo as create table bar (c integer);
> ERROR:  syntax error at or near "create"
> LINE 1: prepare foo as create table bar (c integer);
>                        ^
>
> This error message does not in any way indicate that one cannot
> prepare a create table statement.
>
> It appears that PostgreSQL does not support this operation, but I
> cannot find any documentation that indicates why, or indeed if
> this is intentional.

http://www.postgresql.org/docs/9.1/interactive/sql-prepare.html

The synopsis is:

  PREPARE name [ ( data_type [, ...] ) ] AS statement

and the Parameters section says:

  statement
    Any SELECT, INSERT, UPDATE, DELETE, or VALUES statement.

Thus, to put anything except a valid SELECT, INSERT, UPDATE, DELETE,
or VALUES statement at that position is a syntax error.  What would
you expect to happen in general when you put some statement in the
middle of another statement where it is not supported?  For example,
if you put a CREATE TABLE statement in the FROM clause of a SELECT
statement, what would you expect?

-Kevin