+ A
+ endterm="sql-select-title">, TABLE,
+ or
command,
or an command
- that runs a prepared SELECT> or VALUES> query.
+ that runs a prepared SELECT>, TABLE>, or VALUES> query.
+ To copy a table completely, the short form using
+ the TABLE command can also be used:
+
+CREATE TABLE films2 AS
+ TABLE films;
+
+
+
Create a new temporary table films_recent, consisting of
only recent entries from the table films, using a
SELECT
+ TABLE
WITH
retrieve rows from a table or view
+
+
+
in SELECT
and with_query is:
with_query_name [ ( column_name [, ...] ) ] AS ( select )
+
+TABLE table_name | with_query_name
+
+
+
TABLE Command
+
+ The command
+TABLE name
+
+ is completely equivalent to
+SELECT * FROM name
+
+ It can be used as a top-level command or as a space-saving syntax
+ variant in parts of complex queries.
+
+
F611 Indicator data types YES
F641 Row and table constructors NO
F651 Catalog name qualifiers YES
-F661 Simple tables NO
+F661 Simple tables YES
F671 Subqueries in CHECK NO intentionally omitted
F672 Retrospective check constraints YES
F690 Collation support NO
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.637 2008/11/13 11:10:06 meskes Exp $
+ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.638 2008/11/20 14:04:46 petere Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
$$ = (Node *)n;
}
| values_clause { $$ = $1; }
+ | TABLE qualified_name
+ {
+ /* same as SELECT * FROM qualified_name */
+ ColumnRef *cr = makeNode(ColumnRef);
+ ResTarget *rt = makeNode(ResTarget);
+ SelectStmt *n = makeNode(SelectStmt);
+
+ cr->fields = list_make1(makeNode(A_Star));
+ cr->location = -1;
+
+ rt->name = NULL;
+ rt->indirection = NIL;
+ rt->val = (Node *)cr;
+ rt->location = -1;
+
+ $2->inhOpt = INH_DEFAULT;
+ $2->alias = NULL;
+
+ n->targetList = list_make1(rt);
+ n->fromClause = list_make1($2);
+ $$ = (Node *)n;
+ }
| select_clause UNION opt_all select_clause
{
$$ = makeSetOp(SETOP_UNION, $3, $1, $4);
*
* Copyright (c) 2000-2008, PostgreSQL Global Development Group
*
- * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.176 2008/11/11 02:42:32 tgl Exp $
+ * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.177 2008/11/20 14:04:46 petere Exp $
*/
/*----------------------------------------------------------------------
"DELETE FROM", "DISCARD", "DROP", "END", "EXECUTE", "EXPLAIN", "FETCH",
"GRANT", "INSERT", "LISTEN", "LOAD", "LOCK", "MOVE", "NOTIFY", "PREPARE",
"REASSIGN", "REINDEX", "RELEASE", "RESET", "REVOKE", "ROLLBACK",
- "SAVEPOINT", "SELECT", "SET", "SHOW", "START", "TRUNCATE", "UNLISTEN",
+ "SAVEPOINT", "SELECT", "SET", "SHOW", "START", "TABLE", "TRUNCATE", "UNLISTEN",
"UPDATE", "VACUUM", "VALUES", "WITH", NULL
};
COMPLETE_WITH_ATTR(prev_wd, "");
/*
- * Complete INSERT INTO
with "VALUES" or "SELECT" or "DEFAULT
- * VALUES"
+ * Complete INSERT INTO
with "VALUES" or "SELECT" or
+ * "TABLE" or "DEFAULT VALUES"
*/
else if (pg_strcasecmp(prev3_wd, "INSERT") == 0 &&
pg_strcasecmp(prev2_wd, "INTO") == 0)
{
static const char *const list_INSERT[] =
- {"DEFAULT VALUES", "SELECT", "VALUES", NULL};
+ {"DEFAULT VALUES", "SELECT", "TABLE", "VALUES", NULL};
COMPLETE_WITH_LIST(list_INSERT);
}
- /* Complete INSERT INTO
(attribs) with "VALUES" or "SELECT" */
+ /* Complete INSERT INTO
(attribs) with "VALUES" or "SELECT" or "TABLE" */
else if (pg_strcasecmp(prev4_wd, "INSERT") == 0 &&
pg_strcasecmp(prev3_wd, "INTO") == 0 &&
prev_wd[strlen(prev_wd) - 1] == ')')
{
static const char *const list_INSERT[] =
- {"SELECT", "VALUES", NULL};
+ {"SELECT", "TABLE", "VALUES", NULL};
COMPLETE_WITH_LIST(list_INSERT);
}
UNION ALL
SELECT 2+2, 57
UNION ALL
-SELECT * FROM int8_tbl;
+TABLE int8_tbl;
column1 | column2
------------------+-------------------
1 | 2
UNION ALL
SELECT 2+2, 57
UNION ALL
-SELECT * FROM int8_tbl;
+TABLE int8_tbl;
--
-- Test ORDER BY options