?
This document uses PHP Chinese website manual Release
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name [ (column_name [, ...] ) ] [ WITH ( storage_parameter [= value] [, ... ] ) | WITH OIDS | WITHOUT OIDS ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ TABLESPACE tablespace ] AS query [ WITH [ NO ] DATA ]
CREATE TABLE AS創(chuàng)建一個(gè)表并且用來自SELECT命令的結(jié)果填充該表。 該表的字段和SELECT輸出字段的名字及類型相關(guān)。 不過你可以通過明確地給出一個(gè)字段名字列表來覆蓋 SELECT輸出字段的名字。
CREATE TABLE AS和創(chuàng)建視圖有點(diǎn)像,不過兩者之間實(shí)在是差異很大: 它創(chuàng)建一個(gè)新表并且只對(duì)查詢計(jì)算一次來填充這個(gè)新表。新表不能跟蹤源表的變化。 相比之下,每次做查詢的時(shí)候,視圖都重新計(jì)算定義它的SELECT語句。
忽略。僅僅為了兼容性而存在。請(qǐng)參考CREATE TABLE獲取細(xì)節(jié)。
如果聲明了這個(gè)選項(xiàng),則該表作為臨時(shí)表創(chuàng)建。 參閱CREATE TABLE獲取細(xì)節(jié)。
要?jiǎng)?chuàng)建的表名(可以用模式修飾)
字段的名稱。如果沒有提供字段名字,那么就從查詢的輸出字段名中獲取。 如果表是從一個(gè)EXECUTE命令創(chuàng)建的,那么就不能聲明字段名列表。
這個(gè)子句為新表指定了可選的存儲(chǔ)參數(shù);參見存儲(chǔ)參數(shù)獲取更多信息。 WITH子句還可以包含OIDS=TRUE或OIDS來為新表中的行分配和存儲(chǔ)OID(對(duì)象表示符); 或者用OIDS=FALSE表示不分配OID 。參見CREATE TABLE獲取更多信息。
These are obsolescent syntaxes equivalent to WITH (OIDS) and WITH (OIDS=FALSE), respectively. If you wish to give both an OIDS setting and storage parameters, you must use the WITH ( ... ) syntax; see above.
這些是反對(duì)使用的、分別等價(jià)于WITH (OIDS) 和WITH (OIDS=FALSE)的語法。如果你想給定 OIDS設(shè)置和存儲(chǔ)參數(shù),你必須使用 WITH ( ... )語法;見上面。
使用ON COMMIT控制臨時(shí)表在事務(wù)塊結(jié)尾的行為??捎玫娜齻€(gè)選項(xiàng)如下:
不采取任何特別的動(dòng)作,這是缺省。
刪除臨時(shí)表中的所有行。本質(zhì)上是在每次提交事務(wù)后自動(dòng)執(zhí)行一個(gè)TRUNCATE命令。
在目前事務(wù)塊結(jié)尾刪除臨時(shí)表
The tablespace is the name of the tablespace in which the new table is to be created. If not specified, default_tablespace is consulted, or temp_tablespaces if the table is temporary.
指定新表將要在tablespace表空間內(nèi)創(chuàng)建。 如果沒有聲明,將查詢default_tablespace, 如果表為空,那么將查詢temp_tablespaces。
一個(gè)SELECT,TABLE, 或者VALUES命令或者一個(gè)運(yùn)行預(yù)備好的SELECT,TABLE或者VALUES查詢的EXECUTE命令。
該語句聲明查詢產(chǎn)生的數(shù)據(jù)是否應(yīng)該被復(fù)制到新表中。若沒有,則 僅僅復(fù)制了標(biāo)準(zhǔn)結(jié)構(gòu)。默認(rèn)是復(fù)制數(shù)據(jù)。
這條命令在功能上等效于SELECT INTO,但是更建議你用這個(gè)命令, 因?yàn)樗惶赡芎?tt class="COMMAND">SELECT INTO語法的其它方面混淆。 另外,CREATE TABLE AS提供了SELECT INTO功能的超集。
在PostgreSQL之前,CREATE TABLE AS總是在它創(chuàng)建的表中包含OID , 而在PostgreSQL里,CREATE TABLE AS命令允許明確聲明是否應(yīng)該包含OID。 如果沒有明確聲明是否應(yīng)該包含OID,那么使用配置變量default_with_oids的設(shè)置。 到了PostgreSQL8.1 這個(gè)變量缺省為假,缺省行為和8.0之前的版本不同。 因此,那些要求CREATE TABLE AS創(chuàng)建的表包含OID的應(yīng)用應(yīng)該明確聲明WITH (OIDS)以確保正確的行為。
創(chuàng)建一個(gè)只包含表films中最近的記錄的新表films_recent:
CREATE TABLE films_recent AS SELECT * FROM films WHERE date_prod >= '2002-01-01';
完全復(fù)制一個(gè)表,使用TABLE的簡(jiǎn)短形式也可以被使用:
CREATE TABLE films2 AS TABLE films;
使用預(yù)備語句創(chuàng)建一個(gè)只包含表films中最近的記錄的新臨時(shí)表films_recent, 該臨時(shí)表包含OID并且在事務(wù)結(jié)束時(shí)將被刪除:
PREPARE recentfilms(date) AS SELECT * FROM films WHERE date_prod > $1; CREATE TEMP TABLE films_recent WITH (OIDS) ON COMMIT DROP AS EXECUTE recentfilms('2002-01-01');
CREATE TABLE AS兼容SQL標(biāo)準(zhǔn), 以下是非標(biāo)準(zhǔn)擴(kuò)展:
標(biāo)準(zhǔn)要求在子查詢子句周圍有圓括弧,在 PostgreSQL里,這些圓括弧是可選的。
在標(biāo)準(zhǔn)中,需要WITH [ NO ] DATA子句; 在PostgreSQL中是可選的。
標(biāo)準(zhǔn)需要一個(gè)WITH [ NO ] DATA子句;在PostgreSQL里是可選的。
PostgreSQL處理臨時(shí)表的方法和標(biāo)準(zhǔn)相差較大; 參閱CREATE TABLE獲取細(xì)節(jié)。
WITH子句是PostgreSQL擴(kuò)展, 并且SQL標(biāo)準(zhǔn)中也沒有存儲(chǔ)參數(shù)和OID 。
PostgreSQL表空間的概念也不是標(biāo)準(zhǔn)的一部分。 因此TABLESPACE子句也是擴(kuò)展。