ALTER FOREIGN TABLE — 更改外部表的定義
ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name[ * ]action[, ... ] ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ]name[ * ] RENAME [ COLUMN ]column_nameTOnew_column_nameALTER FOREIGN TABLE [ IF EXISTS ]nameRENAME TOnew_nameALTER FOREIGN TABLE [ IF EXISTS ]nameSET SCHEMAnew_schemawhereactionis one of: ADD [ COLUMN ]column_namedata_type[ COLLATEcollation] [column_constraint[ ... ] ] DROP [ COLUMN ] [ IF EXISTS ]column_name[ RESTRICT | CASCADE ] ALTER [ COLUMN ]column_name[ SET DATA ] TYPEdata_type[ COLLATEcollation] ALTER [ COLUMN ]column_nameSET DEFAULTexpressionALTER [ COLUMN ]column_nameDROP DEFAULT ALTER [ COLUMN ]column_name{ SET | DROP } NOT NULL ALTER [ COLUMN ]column_nameSET STATISTICSintegerALTER [ COLUMN ]column_nameSET (attribute_option=value[, ... ] ) ALTER [ COLUMN ]column_nameRESET (attribute_option[, ... ] ) ALTER [ COLUMN ]column_nameSET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ALTER [ COLUMN ]column_nameOPTIONS ( [ ADD | SET | DROP ]option['value'] [, ... ]) ADDtable_constraint[ NOT VALID ] VALIDATE CONSTRAINTconstraint_nameDROP CONSTRAINT [ IF EXISTS ]constraint_name[ RESTRICT | CASCADE ] DISABLE TRIGGER [trigger_name| ALL | USER ] ENABLE TRIGGER [trigger_name| ALL | USER ] ENABLE REPLICA TRIGGERtrigger_nameENABLE ALWAYS TRIGGERtrigger_nameSET WITHOUT OIDS INHERITparent_tableNO INHERITparent_tableOWNER 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。不允許重複的選項名稱(儘管表選項和列選項具有相同的名稱是允許的)。選項名稱和值也會使用外部資料包裝器庫進行驗證。
RENAMERENAME 形式更改外部表的名稱或外部表中單個列的名稱。
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 不允許零列的外部表。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。