ALTER FOREIGN TABLE — 更改外部表的定義
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name
[ * ]action
[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name
[ * ] RENAME [ COLUMN ]column_name
TOnew_column_name
ALTER FOREIGN TABLE [ IF EXISTS ]name
RENAME TOnew_name
ALTER FOREIGN TABLE [ IF EXISTS ]name
SET SCHEMAnew_schema
whereaction
is one of: ADD [ COLUMN ]column_name
data_type
[ COLLATEcollation
] [column_constraint
[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]column_name
[ RESTRICT | CASCADE ] ALTER [ COLUMN ]column_name
[ SET DATA ] TYPEdata_type
[ COLLATEcollation
] ALTER [ COLUMN ]column_name
SET DEFAULTexpression
ALTER [ COLUMN ]column_name
DROP DEFAULT ALTER [ COLUMN ]column_name
{ SET | DROP } NOT NULL ALTER [ COLUMN ]column_name
SET STATISTICSinteger
ALTER [ COLUMN ]column_name
SET (attribute_option
=value
[, ... ] ) ALTER [ COLUMN ]column_name
RESET (attribute_option
[, ... ] ) ALTER [ COLUMN ]column_name
SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ALTER [ COLUMN ]column_name
OPTIONS ( [ ADD | SET | DROP ]option
['value
'] [, ... ]) ADDtable_constraint
[ NOT VALID ] VALIDATE CONSTRAINTconstraint_name
DROP CONSTRAINT [ IF EXISTS ]constraint_name
[ RESTRICT | CASCADE ] DISABLE TRIGGER [trigger_name
| ALL | USER ] ENABLE TRIGGER [trigger_name
| ALL | USER ] ENABLE REPLICA TRIGGERtrigger_name
ENABLE ALWAYS TRIGGERtrigger_name
SET WITHOUT OIDS INHERITparent_table
NO INHERITparent_table
OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } OPTIONS ( [ ADD | SET | DROP ]option
['value
'] [, ... ])
ALTER FOREIGN TABLE
更改現有外部表的定義。有幾種子形式。
ADD COLUMN
此形式向外部表新增一個新列,語法與 CREATE FOREIGN TABLE
相同。與向常規表新增列不同,此操作不會影響底層儲存:此操作只是宣告有一個新列現在可以透過外部表訪問。
DROP COLUMN [ IF EXISTS ]
此形式從外部表中刪除一個列。如果外部表的其他物件依賴於該列(例如檢視),則需要指定 CASCADE
。如果指定了 IF EXISTS
並且列不存在,則不會引發錯誤。在這種情況下,會發出通知。
SET DATA TYPE
此形式更改外部表列的資料型別。同樣,這不會影響任何底層儲存:此操作只是更改 PostgreSQL 認為該列具有的資料型別。
SET
/DROP DEFAULT
這些形式設定或刪除列的預設值。預設值僅適用於後續的 INSERT
或 UPDATE
命令;它們不會導致表中已有的行發生更改。
SET
/DROP NOT NULL
標記一個列允許或不允許 NULL
值。
SET STATISTICS
此形式為後續的 ANALYZE
操作設定每個列的統計資訊收集目標。有關更多詳細資訊,請參閱 ALTER TABLE
的類似形式。
SET ( attribute_option
= value
[, ... ] )
RESET ( attribute_option
[, ... ] )
此形式設定或重置每個屬性的選項。有關更多詳細資訊,請參閱 ALTER TABLE
的類似形式。
SET STORAGE
此形式設定列的儲存模式。有關更多詳細資訊,請參閱 ALTER TABLE
的類似形式。請注意,儲存模式不會產生任何影響,除非表的外部資料包裝器選擇關注它。
ADD table_constraint
[ NOT VALID ]
此形式向外部表新增一個新約束,語法與 CREATE FOREIGN TABLE
相同。目前只支援 CHECK
和 NOT NULL
約束。
與向常規表新增約束不同,此操作不會驗證約束是否正確;相反,此操作只是宣告應該假設外部表中的所有行都滿足某個新條件。(請參閱 CREATE FOREIGN TABLE
中的討論。)如果約束被標記為 NOT VALID
(僅適用於 CHECK
情況),則不假設它成立,而僅記錄下來以備將來使用。
VALIDATE CONSTRAINT
此形式將之前被標記為 NOT VALID
的約束標記為有效。不會採取任何行動來驗證約束,但將來的查詢將假定它成立。
DROP CONSTRAINT [ IF EXISTS ]
此形式刪除外部表上的指定約束。如果指定了 IF EXISTS
並且約束不存在,則不會引發錯誤。在這種情況下,會發出通知。
DISABLE
/ENABLE [ REPLICA | ALWAYS ] TRIGGER
這些形式配置外部表所屬觸發器(trigger)的觸發。有關更多詳細資訊,請參閱 ALTER TABLE
的類似形式。
SET WITHOUT OIDS
用於刪除 oid
系統列的相容性語法。由於 oid
系統列已無法新增,此操作永遠不會產生任何效果。
INHERIT parent_table
此形式將目標外部表新增為指定父表的新子表。有關更多詳細資訊,請參閱 ALTER TABLE
的類似形式。
NO INHERIT parent_table
此形式將目標外部表從指定父表的子表列表中移除。
OWNER
此形式將外部表的所有者更改為指定使用者。
OPTIONS ( [ ADD | SET | DROP ] option
['value
'] [, ... ] )
更改外部表或其某個列的選項。ADD
、SET
和 DROP
指定要執行的操作。如果沒有顯式指定操作,則假定為 ADD
。不允許重複的選項名稱(儘管表選項和列選項具有相同的名稱是允許的)。選項名稱和值也會使用外部資料包裝器庫進行驗證。
RENAME
RENAME
形式更改外部表的名稱或外部表中單個列的名稱。
SET SCHEMA
此形式將外部表移動到另一個模式。
除 RENAME
和 SET SCHEMA
外,所有操作都可以組合成一個多重修改列表,以並行應用。例如,可以在單個命令中新增多個列和/或更改多個列的型別。
如果命令寫為 ALTER FOREIGN TABLE IF EXISTS ...
並且外部表不存在,則不會引發錯誤。在這種情況下會發出通知。
要使用 ALTER FOREIGN TABLE
,您必須擁有該表。要更改外部表的模式,您還必須對新模式具有 CREATE
許可權。要更改所有者,您必須能夠 SET ROLE
到新的所有者角色,並且該角色必須對錶的模式具有 CREATE
許可權。(這些限制確保更改所有者不會執行您透過刪除和重新建立表而無法完成的操作。但是,超級使用者可以更改任何表的歸屬。)要新增列或更改列型別,您還必須對資料型別具有 USAGE
許可權。
name
要更改的現有外部表的名稱(可選擇性地帶模式限定)。如果表名稱前指定了 ONLY
,則只更改該表。如果未指定 ONLY
,則更改該表及其所有子表(如果存在)。可選地,可以在表名稱後指定 *
以明確表示包含子表。
column_name
新列或現有列的名稱。
new_column_name
現有列的新名稱。
new_name
表的新名稱。
data_type
新列的資料型別,或現有列的新資料型別。
table_constraint
外部表的新表約束。
constraint_name
要刪除的現有約束的名稱。
CASCADE
自動刪除依賴於被刪除列或約束的物件(例如,引用該列的檢視),以及依賴於這些物件的物件(參見 第 5.15 節)。
RESTRICT
如果存在任何依賴物件,則拒絕刪除列或約束。這是預設行為。
trigger_name
要停用或啟用的單個觸發器的名稱。
ALL
停用或啟用外部表所屬的所有觸發器。(如果任何觸發器是內部生成的觸發器,則需要超級使用者許可權。核心系統不會向外部表新增此類觸發器,但附加程式碼可能會這樣做。)
USER
停用或啟用外部表所屬的所有觸發器,但內部生成的觸發器除外。
parent_table
要與此外部表關聯或取消關聯的父表。
new_owner
新表所有者的使用者名稱。
new_schema
將表移動到的模式的名稱。
關鍵字 COLUMN
是多餘的,可以省略。
在使用 ADD COLUMN
或 DROP COLUMN
新增或刪除列、新增 NOT NULL
或 CHECK
約束,或者使用 SET DATA TYPE
更改列型別時,不會檢查與外部伺服器的一致性。使用者有責任確保表定義與遠端端匹配。
有關有效引數的進一步說明,請參閱 CREATE FOREIGN TABLE
。
將列標記為非空
ALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;
更改外部表的選項
ALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3);
ADD
、DROP
和 SET DATA TYPE
形式符合 SQL 標準。其他形式是 PostgreSQL 對 SQL 標準的擴充套件。此外,在一個 ALTER FOREIGN TABLE
命令中指定多個操作的能力也是一種擴充套件。
ALTER FOREIGN TABLE DROP COLUMN
可用於刪除外部表的唯一列,從而留下一個零列的表。這是 SQL 的一個擴充套件,SQL 不允許零列的外部表。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。