{"Entry":{"collection":"sql","key":"alter-foreign-table","name":"ALTER FOREIGN TABLE","aliases":["alterforeigntable"],"metadata":{"aliases":["alterforeigntable"],"changed_in":["9.2","9.3","9.4","9.5","12","14","16"],"changes":[{"from":"9.0","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":[],"removed":[]},"status":"added","synopsis":null,"to":"9.1"},{"from":"9.1","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters"],"removed":[]},"status":"changed","synopsis":{"added":["ALTER FOREIGN TABLE [ IF EXISTS ] name","ALTER FOREIGN TABLE [ IF EXISTS ] name","RENAME [ COLUMN ] column_name TO new_column_name","ALTER FOREIGN TABLE [ IF EXISTS ] name","ALTER FOREIGN TABLE [ IF EXISTS ] name","ADD [ COLUMN ] column_name data_type [ NULL | NOT NULL ]","DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]","ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type","ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL","ALTER [ COLUMN ] column_name SET STATISTICS integer","ALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )","ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )","ALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])"],"removed":["RENAME [ COLUMN ] column TO new_column","ADD [ COLUMN ] column type [ NULL | NOT NULL ]","DROP [ COLUMN ] [ IF EXISTS ] column [ RESTRICT | CASCADE ]","ALTER [ COLUMN ] column [ SET DATA ] TYPE type","ALTER [ COLUMN ] column { SET | DROP } NOT NULL"]},"to":"9.2"},{"from":"9.2","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":{"added":["ADD [ COLUMN ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]","ALTER [ COLUMN ] column_name SET DEFAULT expression","ALTER [ COLUMN ] column_name DROP DEFAULT"],"removed":["ADD [ COLUMN ] column_name data_type [ NULL | NOT NULL ]"]},"to":"9.3"},{"from":"9.3","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters"],"removed":[]},"status":"changed","synopsis":{"added":["DISABLE TRIGGER [ trigger_name | ALL | USER ]","ENABLE TRIGGER [ trigger_name | ALL | USER ]","ENABLE REPLICA TRIGGER trigger_name","ENABLE ALWAYS TRIGGER trigger_name"],"removed":[]},"to":"9.4"},{"from":"9.4","purpose_changed":false,"renamed":null,"sections":{"added":["see_also"],"changed":["description","parameters","notes","examples"],"removed":[]},"status":"changed","synopsis":{"added":["ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]","ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]","ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]","ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }","ALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])","ADD table_constraint [ NOT VALID ]","VALIDATE CONSTRAINT constraint_name","DROP CONSTRAINT [ IF EXISTS ]  constraint_name [ RESTRICT | CASCADE ]","SET WITH OIDS","SET WITHOUT OIDS","INHERIT parent_table","NO INHERIT parent_table","OWNER TO { new_owner | CURRENT_USER | SESSION_USER }"],"removed":[]},"to":"9.5"},{"from":"9.5","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"9.6"},{"from":"10","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["examples"],"removed":[]},"status":"changed","synopsis":null,"to":"11"},{"from":"11","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters"],"removed":[]},"status":"changed","synopsis":{"added":[],"removed":["SET WITH OIDS","SET WITHOUT OIDS"]},"to":"12"},{"from":"13","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":{"added":["ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]","OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }"],"removed":[]},"to":"14"},{"from":"15","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":{"added":["ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }"],"removed":[]},"to":"16"},{"from":"16","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"17"},{"from":"17","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"18"},{"from":"18","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["parameters"],"removed":[]},"status":"changed","synopsis":null,"to":"19"}],"content_hash":"c8c5f0fca5d35300eabfc0ae2d6f21372fba940ddd3bb0dc7f5f237007b48066","editorial":{},"first_version":"9.1","group":"foreign","imported_at":"2026-09-30T17:43:38.795505+08:00","last_version":"20","name":"ALTER FOREIGN TABLE","object":"FOREIGN TABLE","position":9005,"present_in":["9.1","9.2","9.3","9.4","9.5","9.6","10","11","12","13","14","15","16","17","18","19","20"],"purpose":"change the definition of a foreign table","purpose_zh":"","related":["create-foreign-table","drop-foreign-table"],"slug":"alter-foreign-table","source_rev":"a709ab85","synopsis":"ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]\naction [, ... ]\nALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]\nRENAME [ COLUMN ] column_name TO new_column_name\nALTER FOREIGN TABLE [ IF EXISTS ] name\nRENAME TO new_name\nALTER FOREIGN TABLE [ IF EXISTS ] name\nSET SCHEMA new_schema\nwhere action is one of:\n\nADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]\nDROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]\nALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]\nALTER [ COLUMN ] column_name SET DEFAULT expression\nALTER [ COLUMN ] column_name DROP DEFAULT\nALTER [ COLUMN ] column_name { SET | DROP } NOT NULL\nALTER [ COLUMN ] column_name SET STATISTICS integer\nALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )\nALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )\nALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }\nALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])\nADD table_constraint [ NOT VALID ]\nVALIDATE CONSTRAINT constraint_name\nDROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]\nDISABLE TRIGGER [ trigger_name | ALL | USER ]\nENABLE TRIGGER [ trigger_name | ALL | USER ]\nENABLE REPLICA TRIGGER trigger_name\nENABLE ALWAYS TRIGGER trigger_name\nSET WITHOUT OIDS\nINHERIT parent_table\nNO INHERIT parent_table\nOWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nOPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])","verb":"ALTER"}},"Definition":{"Collection":"sql","Key":"alter-foreign-table","SourceDatabase":"center","Version":"18","SourceTable":"sqlcmd","SourceKey":"alter-foreign-table","SourceRevision":"a709ab85","Facts":{"anchor":"SQL-ALTERFOREIGNTABLE","file":"sql-alterforeigntable.html","lang":"en","name":"ALTER FOREIGN TABLE","purpose":"change the definition of a foreign table","purpose_zh":"","related":["create-foreign-table","drop-foreign-table"],"sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eALTER FOREIGN TABLE\u003c/code\u003e changes the definition of an existing foreign table. There are several subforms:\u003c/p\u003e\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eADD [ COLUMN ] [ IF NOT EXISTS ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form adds a new column to the foreign table, using the same syntax as \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\"\u003e\u003ccode class=\"command\"\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e. If \u003ccode class=\"literal\"\u003eIF NOT EXISTS\u003c/code\u003e is specified and a column already exists with this name, no error is thrown. Unlike the case when adding a column to a regular table, nothing happens to the underlying storage: this action simply declares that some new column is now accessible through the foreign table.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eDROP [ COLUMN ] [ IF EXISTS ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form drops a column from a foreign table. You will need to say \u003ccode class=\"literal\"\u003eCASCADE\u003c/code\u003e if anything outside the table depends on the column; for example, views. If \u003ccode class=\"literal\"\u003eIF EXISTS\u003c/code\u003e is specified and the column does not exist, no error is thrown. In this case a notice is issued instead.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET DATA TYPE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form changes the type of a column of a foreign table. Again, this has no effect on any underlying storage: this action simply changes the type that \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e believes the column to have.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET\u003c/code\u003e/\u003ccode class=\"literal\"\u003eDROP DEFAULT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThese forms set or remove the default value for a column. Default values only apply in subsequent \u003ccode class=\"command\"\u003eINSERT\u003c/code\u003e or \u003ccode class=\"command\"\u003eUPDATE\u003c/code\u003e commands; they do not cause rows already in the table to change.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET\u003c/code\u003e/\u003ccode class=\"literal\"\u003eDROP NOT NULL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eMark a column as allowing, or not allowing, null values.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET STATISTICS\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form sets the per-column statistics-gathering target for subsequent \u003ca href=\"/docs/18/sql-analyze.html\" title=\"ANALYZE\"\u003e\u003ccode class=\"command\"\u003eANALYZE\u003c/code\u003e\u003c/a\u003e operations. See the similar form of \u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003ccode class=\"command\"\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e for more details.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_option\u003c/code\u003e\u003c/em\u003e = \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e [, ... ] )\u003c/code\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eRESET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_option\u003c/code\u003e\u003c/em\u003e [, ... ] )\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form sets or resets per-attribute options. See the similar form of \u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003ccode class=\"command\"\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e for more details.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET STORAGE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form sets the storage mode for a column. See the similar form of \u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003ccode class=\"command\"\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e for more details. Note that the storage mode has no effect unless the table's foreign-data wrapper chooses to pay attention to it.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eADD \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_constraint\u003c/code\u003e\u003c/em\u003e [ NOT VALID ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form adds a new constraint to a foreign table, using the same syntax as \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\"\u003e\u003ccode class=\"command\"\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e. Currently only \u003ccode class=\"literal\"\u003eCHECK\u003c/code\u003e and \u003ccode class=\"literal\"\u003eNOT NULL\u003c/code\u003e constraints are supported.\u003c/p\u003e\u003cp\u003eUnlike the case when adding a constraint to a regular table, nothing is done to verify the constraint is correct; rather, this action simply declares that some new condition should be assumed to hold for all rows in the foreign table. (See the discussion in \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\"\u003e\u003ccode class=\"command\"\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e.) If the constraint is marked \u003ccode class=\"literal\"\u003eNOT VALID\u003c/code\u003e (allowed only for the \u003ccode class=\"literal\"\u003eCHECK\u003c/code\u003e case), then it isn't assumed to hold, but is only recorded for possible future use.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eVALIDATE CONSTRAINT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form marks as valid a constraint that was previously marked as \u003ccode class=\"literal\"\u003eNOT VALID\u003c/code\u003e. No action is taken to verify the constraint, but future queries will assume that it holds.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eDROP CONSTRAINT [ IF EXISTS ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form drops the specified constraint on a foreign table. If \u003ccode class=\"literal\"\u003eIF EXISTS\u003c/code\u003e is specified and the constraint does not exist, no error is thrown. In this case a notice is issued instead.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eDISABLE\u003c/code\u003e/\u003ccode class=\"literal\"\u003eENABLE [ REPLICA | ALWAYS ] TRIGGER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThese forms configure the firing of trigger(s) belonging to the foreign table. See the similar form of \u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003ccode class=\"command\"\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e for more details.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET WITHOUT OIDS\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eBackward compatibility syntax for removing the \u003ccode class=\"literal\"\u003eoid\u003c/code\u003e system column. As \u003ccode class=\"literal\"\u003eoid\u003c/code\u003e system columns cannot be added anymore, this never has an effect.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eINHERIT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form adds the target foreign table as a new child of the specified parent table. See the similar form of \u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003ccode class=\"command\"\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e for more details.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eNO INHERIT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form removes the target foreign table from the list of children of the specified parent table.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eOWNER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form changes the owner of the foreign table to the specified user.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eOPTIONS ( [ ADD | SET | DROP ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoption\u003c/code\u003e\u003c/em\u003e ['\u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e'] [, ... ] )\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eChange options for the foreign table or one of its columns. \u003ccode class=\"literal\"\u003eADD\u003c/code\u003e, \u003ccode class=\"literal\"\u003eSET\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eDROP\u003c/code\u003e specify the action to be performed. \u003ccode class=\"literal\"\u003eADD\u003c/code\u003e is assumed if no operation is explicitly specified. Duplicate option names are not allowed (although it's OK for a table option and a column option to have the same name). Option names and values are also validated using the foreign data wrapper library.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eRENAME\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe \u003ccode class=\"literal\"\u003eRENAME\u003c/code\u003e forms change the name of a foreign table or the name of an individual column in a foreign table.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET SCHEMA\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form moves the foreign table into another schema.\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e\u003cp\u003eAll the actions except \u003ccode class=\"literal\"\u003eRENAME\u003c/code\u003e and \u003ccode class=\"literal\"\u003eSET SCHEMA\u003c/code\u003e can be combined into a list of multiple alterations to apply in parallel. For example, it is possible to add several columns and/or alter the type of several columns in a single command.\u003c/p\u003e\u003cp\u003eIf the command is written as \u003ccode class=\"literal\"\u003eALTER FOREIGN TABLE IF EXISTS ...\u003c/code\u003e and the foreign table does not exist, no error is thrown. A notice is issued in this case.\u003c/p\u003e\u003cp\u003eYou must own the table to use \u003ccode class=\"command\"\u003eALTER FOREIGN TABLE\u003c/code\u003e. To change the schema of a foreign table, you must also have \u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e privilege on the new schema. To alter the owner, you must be able to \u003ccode class=\"literal\"\u003eSET ROLE\u003c/code\u003e to the new owning role, and that role must have \u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e privilege on the table's schema. (These restrictions enforce that altering the owner doesn't do anything you couldn't do by dropping and recreating the table. However, a superuser can alter ownership of any table anyway.) To add a column or alter a column type, you must also have \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e privilege on the data type.\u003c/p\u003e","key":"description","title":"Description"},{"html":"\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name (possibly schema-qualified) of an existing foreign table to alter. If \u003ccode class=\"literal\"\u003eONLY\u003c/code\u003e is specified before the table name, only that table is altered. If \u003ccode class=\"literal\"\u003eONLY\u003c/code\u003e is not specified, the table and all its descendant tables (if any) are altered. Optionally, \u003ccode class=\"literal\"\u003e*\u003c/code\u003e can be specified after the table name to explicitly indicate that descendant tables are included.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eName of a new or existing column.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_column_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eNew name for an existing column.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eNew name for the table.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003edata_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eData type of the new column, or new data type for an existing column.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_constraint\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eNew table constraint for the foreign table.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eName of an existing constraint to drop.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eCASCADE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eAutomatically drop objects that depend on the dropped column or constraint (for example, views referencing the column), and in turn all objects that depend on those objects (see \u003ca href=\"/docs/18/ddl-depend.html\" title=\"5.15. Dependency Tracking\"\u003eSection 5.15\u003c/a\u003e).\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eRESTRICT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eRefuse to drop the column or constraint if there are any dependent objects. This is the default behavior.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eName of a single trigger to disable or enable.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eALL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eDisable or enable all triggers belonging to the foreign table. (This requires superuser privilege if any of the triggers are internally generated triggers. The core system does not add such triggers to foreign tables, but add-on code could do so.)\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eUSER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eDisable or enable all triggers belonging to the foreign table except for internally generated triggers.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eA parent table to associate or de-associate with this foreign table.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_owner\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe user name of the new owner of the table.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_schema\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of the schema to which the table will be moved.\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"Parameters"},{"html":"\u003cp\u003eThe key word \u003ccode class=\"literal\"\u003eCOLUMN\u003c/code\u003e is noise and can be omitted.\u003c/p\u003e\u003cp\u003eConsistency with the foreign server is not checked when a column is added or removed with \u003ccode class=\"literal\"\u003eADD COLUMN\u003c/code\u003e or \u003ccode class=\"literal\"\u003eDROP COLUMN\u003c/code\u003e, a \u003ccode class=\"literal\"\u003eNOT NULL\u003c/code\u003e or \u003ccode class=\"literal\"\u003eCHECK\u003c/code\u003e constraint is added, or a column type is changed with \u003ccode class=\"literal\"\u003eSET DATA TYPE\u003c/code\u003e. It is the user's responsibility to ensure that the table definition matches the remote side.\u003c/p\u003e\u003cp\u003eRefer to \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\"\u003e\u003ccode class=\"command\"\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e for a further description of valid parameters.\u003c/p\u003e","key":"notes","title":"Notes"},{"html":"\u003cp\u003eTo mark a column as not-null:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;\n\u003c/pre\u003e\u003cp\u003eTo change options of a foreign table:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3);\n\u003c/pre\u003e","key":"examples","title":"Examples"},{"html":"\u003cp\u003eThe forms \u003ccode class=\"literal\"\u003eADD\u003c/code\u003e, \u003ccode class=\"literal\"\u003eDROP\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eSET DATA TYPE\u003c/code\u003e conform with the SQL standard. The other forms are \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e extensions of the SQL standard. Also, the ability to specify more than one manipulation in a single \u003ccode class=\"command\"\u003eALTER FOREIGN TABLE\u003c/code\u003e command is an extension.\u003c/p\u003e\u003cp\u003e\u003ccode class=\"command\"\u003eALTER FOREIGN TABLE DROP COLUMN\u003c/code\u003e can be used to drop the only column of a foreign table, leaving a zero-column table. This is an extension of SQL, which disallows zero-column foreign tables.\u003c/p\u003e","key":"compatibility","title":"Compatibility"},{"html":"\u003cspan class=\"simplelist\"\u003e\u003ca href=\"/wiki/sql/create-foreign-table/?v=18\" title=\"CREATE FOREIGN TABLE\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE FOREIGN TABLE\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/drop-foreign-table/?v=18\" title=\"DROP FOREIGN TABLE\"\u003e\u003cspan class=\"refentrytitle\"\u003eDROP FOREIGN TABLE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e","key":"see_also","title":"See Also"}],"sections_same_as":"","slug":"18","synopsis_html":"ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ * ]\n    \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaction\u003c/code\u003e\u003c/em\u003e [, ... ]\nALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ * ]\n    RENAME [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_column_name\u003c/code\u003e\u003c/em\u003e\nALTER FOREIGN TABLE [ IF EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\n    RENAME TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_name\u003c/code\u003e\u003c/em\u003e\nALTER FOREIGN TABLE [ IF EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\n    SET SCHEMA \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_schema\u003c/code\u003e\u003c/em\u003e\n\n\u003cspan class=\"phrase\"\u003ewhere \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaction\u003c/code\u003e\u003c/em\u003e is one of:\u003c/span\u003e\n\n    ADD [ COLUMN ] [ IF NOT EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e \u003cem class=\"replaceable\"\u003e\u003ccode\u003edata_type\u003c/code\u003e\u003c/em\u003e [ COLLATE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecollation\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_constraint\u003c/code\u003e\u003c/em\u003e [ ... ] ]\n    DROP [ COLUMN ] [ IF EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e [ RESTRICT | CASCADE ]\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e [ SET DATA ] TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003edata_type\u003c/code\u003e\u003c/em\u003e [ COLLATE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecollation\u003c/code\u003e\u003c/em\u003e ]\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e SET DEFAULT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eexpression\u003c/code\u003e\u003c/em\u003e\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e DROP DEFAULT\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e { SET | DROP } NOT NULL\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e SET STATISTICS \u003cem class=\"replaceable\"\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/em\u003e\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e SET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_option\u003c/code\u003e\u003c/em\u003e = \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e [, ... ] )\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e RESET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_option\u003c/code\u003e\u003c/em\u003e [, ... ] )\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e OPTIONS ( [ ADD | SET | DROP ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoption\u003c/code\u003e\u003c/em\u003e ['\u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e'] [, ... ])\n    ADD \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_constraint\u003c/code\u003e\u003c/em\u003e [ NOT VALID ]\n    VALIDATE CONSTRAINT \u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e\n    DROP CONSTRAINT [ IF EXISTS ]  \u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e [ RESTRICT | CASCADE ]\n    DISABLE TRIGGER [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e | ALL | USER ]\n    ENABLE TRIGGER [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e | ALL | USER ]\n    ENABLE REPLICA TRIGGER \u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e\n    ENABLE ALWAYS TRIGGER \u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e\n    SET WITHOUT OIDS\n    INHERIT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\n    NO INHERIT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\n    OWNER TO { \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_owner\u003c/code\u003e\u003c/em\u003e | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\n    OPTIONS ( [ ADD | SET | DROP ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoption\u003c/code\u003e\u003c/em\u003e ['\u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e'] [, ... ])","synopsis_text":"ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]\naction [, ... ]\nALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]\nRENAME [ COLUMN ] column_name TO new_column_name\nALTER FOREIGN TABLE [ IF EXISTS ] name\nRENAME TO new_name\nALTER FOREIGN TABLE [ IF EXISTS ] name\nSET SCHEMA new_schema\nwhere action is one of:\n\nADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]\nDROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]\nALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]\nALTER [ COLUMN ] column_name SET DEFAULT expression\nALTER [ COLUMN ] column_name DROP DEFAULT\nALTER [ COLUMN ] column_name { SET | DROP } NOT NULL\nALTER [ COLUMN ] column_name SET STATISTICS integer\nALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )\nALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )\nALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }\nALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])\nADD table_constraint [ NOT VALID ]\nVALIDATE CONSTRAINT constraint_name\nDROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]\nDISABLE TRIGGER [ trigger_name | ALL | USER ]\nENABLE TRIGGER [ trigger_name | ALL | USER ]\nENABLE REPLICA TRIGGER trigger_name\nENABLE ALWAYS TRIGGER trigger_name\nSET WITHOUT OIDS\nINHERIT parent_table\nNO INHERIT parent_table\nOWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nOPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])"},"ManualEvidence":{},"MeasuredEvidence":{}},"Text":{"Collection":"sql","Key":"alter-foreign-table","SourceDatabase":"pgweb","Version":"18","Locale":"zh-Hans","Title":"ALTER FOREIGN TABLE","Summary":"更改外部表的定义","BodyHTML":"\u003cpre\u003eALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]\naction [, ... ]\nALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]\nRENAME [ COLUMN ] column_name TO new_column_name\nALTER FOREIGN TABLE [ IF EXISTS ] name\nRENAME TO new_name\nALTER FOREIGN TABLE [ IF EXISTS ] name\nSET SCHEMA new_schema\n其中 action 是以下之一：\n\nADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]\nDROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]\nALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]\nALTER [ COLUMN ] column_name SET DEFAULT expression\nALTER [ COLUMN ] column_name DROP DEFAULT\nALTER [ COLUMN ] column_name { SET | DROP } NOT NULL\nALTER [ COLUMN ] column_name SET STATISTICS integer\nALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )\nALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )\nALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }\nALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option [\u0026#39;value\u0026#39;] [, ... ])\nADD table_constraint [ NOT VALID ]\nVALIDATE CONSTRAINT constraint_name\nDROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]\nDISABLE TRIGGER [ trigger_name | ALL | USER ]\nENABLE TRIGGER [ trigger_name | ALL | USER ]\nENABLE REPLICA TRIGGER trigger_name\nENABLE ALWAYS TRIGGER trigger_name\nSET WITHOUT OIDS\nINHERIT parent_table\nNO INHERIT parent_table\nOWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nOPTIONS ( [ ADD | SET | DROP ] option [\u0026#39;value\u0026#39;] [, ... ])\u003c/pre\u003e\u003csection\u003e\u003ch2\u003e描述\u003c/h2\u003e\u003cp\u003e\u003ccode\u003eALTER FOREIGN TABLE\u003c/code\u003e更改现有外部表的定义。有几种子形式：\u003c/p\u003e\u003cdiv\u003e\u003cdl\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eADD [ COLUMN ] [ IF NOT EXISTS ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式使用与 \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\" rel=\"nofollow\"\u003e\u003ccode\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e 相同的语法向外部表添加一个新列。如果指定了\u003ccode\u003eIF NOT EXISTS\u003c/code\u003e并且已存在同名列，则不会抛出错误。与向普通表添加列的情况不同，底层存储不会发生任何变化：该操作只是声明现在可以通过该外部表访问某个新列。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eDROP [ COLUMN ] [ IF EXISTS ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式从外部表中删除一列。如果该表之外的任何对象依赖于该列，例如视图，则需要指定\u003ccode\u003eCASCADE\u003c/code\u003e。如果指定了\u003ccode\u003eIF EXISTS\u003c/code\u003e 而该列不存在，则不会抛出错误，而是改为发出一条提示。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eSET DATA TYPE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式更改外部表中一列的类型。同样，这不会影响任何底层存储：该操作只是更改\u003cspan\u003ePostgreSQL\u003c/span\u003e认为该列具有的类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eSET\u003c/code\u003e/\u003ccode\u003eDROP DEFAULT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这些形式为列设置或移除默认值。默认值只会应用于后续的 \u003ccode\u003eINSERT\u003c/code\u003e或\u003ccode\u003eUPDATE\u003c/code\u003e命令；它们不会导致表中已有的行发生变化。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eSET\u003c/code\u003e/\u003ccode\u003eDROP NOT NULL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e把一列标记为允许或不允许空值。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eSET STATISTICS\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式为后续 \u003ca href=\"/docs/18/sql-analyze.html\" title=\"ANALYZE\" rel=\"nofollow\"\u003e\u003ccode\u003eANALYZE\u003c/code\u003e\u003c/a\u003e操作设置每列的统计信息收集目标。详见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\" rel=\"nofollow\"\u003e\u003ccode\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e的类似形式。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eSET ( \u003cem\u003e\u003ccode\u003eattribute_option\u003c/code\u003e\u003c/em\u003e = \u003cem\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e [, ... ] )\u003c/code\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan\u003e\u003ccode\u003eRESET ( \u003cem\u003e\u003ccode\u003eattribute_option\u003c/code\u003e\u003c/em\u003e [, ... ] )\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式设置或重置每个属性的选项。详见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\" rel=\"nofollow\"\u003e\u003ccode\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e的类似形式。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eSET STORAGE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式设置列的存储模式。详见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\" rel=\"nofollow\"\u003e\u003ccode\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e的类似形式。注意，除非该表的外部数据包装器选择理会该设置，否则存储模式不会产生效果。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eADD \u003cem\u003e\u003ccode\u003etable_constraint\u003c/code\u003e\u003c/em\u003e [ NOT VALID ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式使用与 \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\" rel=\"nofollow\"\u003e\u003ccode\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e 相同的语法为外部表添加一个新约束。目前只支持 \u003ccode\u003eCHECK\u003c/code\u003e和\u003ccode\u003eNOT NULL\u003c/code\u003e约束。\u003c/p\u003e\u003cp\u003e与向普通表添加约束的情况不同，不会采取任何措施来验证该约束是否正确；该操作只是声明应当假定外部表中的所有行都满足某个新条件。（参见 \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\" rel=\"nofollow\"\u003e\u003ccode\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e 中的讨论。）如果约束被标记为\u003ccode\u003eNOT VALID\u003c/code\u003e（仅在\u003ccode\u003eCHECK\u003c/code\u003e 的情况下允许），则不会假定它成立，而只是将其记录下来供将来可能使用。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eVALIDATE CONSTRAINT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式把先前被标记为\u003ccode\u003eNOT VALID\u003c/code\u003e的约束标记为有效。不会采取任何措施来验证该约束，但未来的查询会假定它成立。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eDROP CONSTRAINT [ IF EXISTS ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式删除外部表上指定的约束。如果指定了\u003ccode\u003eIF EXISTS\u003c/code\u003e 而该约束不存在，则不会抛出错误，而是改为发出一条提示。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eDISABLE\u003c/code\u003e/\u003ccode\u003eENABLE [ REPLICA | ALWAYS ] TRIGGER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这些形式配置属于该外部表的触发器的触发方式。详见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\" rel=\"nofollow\"\u003e\u003ccode\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e的类似形式。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eSET WITHOUT OIDS\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这是用于移除\u003ccode\u003eoid\u003c/code\u003e系统列的向后兼容语法。由于如今已无法再添加\u003ccode\u003eoid\u003c/code\u003e系统列，因此它实际上永远不会产生任何效果。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eINHERIT \u003cem\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式把目标外部表添加为指定父表的一个新子表。详见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\" rel=\"nofollow\"\u003e\u003ccode\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e的类似形式。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eNO INHERIT \u003cem\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式把目标外部表从指定父表的子表列表中移除。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eOWNER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式把外部表的拥有者更改为指定用户。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eOPTIONS ( [ ADD | SET | DROP ] \u003cem\u003e\u003ccode\u003eoption\u003c/code\u003e\u003c/em\u003e [\u0026#39;\u003cem\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e\u0026#39;] [, ... ] )\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e更改外部表或其某一列的选项。\u003ccode\u003eADD\u003c/code\u003e、\u003ccode\u003eSET\u003c/code\u003e 和\u003ccode\u003eDROP\u003c/code\u003e指定要执行的动作。如果没有显式指定操作，则默认是 \u003ccode\u003eADD\u003c/code\u003e。不允许重复的选项名（不过表选项和列选项同名是可以的）。选项名和值也会通过外部数据包装器库进行验证。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eRENAME\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e\u003ccode\u003eRENAME\u003c/code\u003e形式更改外部表的名称，或者更改其中某一列的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eSET SCHEMA\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式把外部表移动到另一个模式中。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e\u003cp\u003e除了\u003ccode\u003eRENAME\u003c/code\u003e和\u003ccode\u003eSET SCHEMA\u003c/code\u003e之外，所有动作都可以组合在一个包含多项修改的列表中一并应用。例如，可以在一条命令中添加多个列和/或更改多个列的类型。\u003c/p\u003e\u003cp\u003e如果命令写成\u003ccode\u003eALTER FOREIGN TABLE IF EXISTS ...\u003c/code\u003e而外部表不存在，则不会抛出错误。这种情况下会发出一个提示。\u003c/p\u003e\u003cp\u003e你必须拥有该表才能使用\u003ccode\u003eALTER FOREIGN TABLE\u003c/code\u003e。要更改外部表的模式，你还必须在新模式上具有\u003ccode\u003eCREATE\u003c/code\u003e权限。要更改拥有者，你必须能够对新的所有者角色执行\u003ccode\u003eSET ROLE\u003c/code\u003e，并且该角色必须在该表所在模式上具有\u003ccode\u003eCREATE\u003c/code\u003e权限。（这些限制确保更改拥有者不会做出任何你无法通过删除并重新创建该表来完成的事情。不过，超级用户仍然可以更改任何表的所有权。）要添加列或更改列类型，你还必须在该数据类型上具有\u003ccode\u003eUSAGE\u003c/code\u003e权限。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e参数\u003c/h2\u003e\u003cdiv\u003e\u003cdl\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要修改的现有外部表的名称（可以带模式限定）。如果在表名前指定了 \u003ccode\u003eONLY\u003c/code\u003e，则只修改该表。如果未指定\u003ccode\u003eONLY\u003c/code\u003e，则该表及其所有后代表（如果有）都会被修改。也可以在表名后指定 \u003ccode\u003e*\u003c/code\u003e，显式表示包括后代表。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e新列或现有列的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003enew_column_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e现有列的新名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003enew_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e表的新名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003edata_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e新列的数据类型，或现有列的新数据类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003etable_constraint\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该外部表的新表约束。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要删除的现有约束的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eCASCADE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e自动删除依赖于被删除列或约束的对象（例如引用该列的视图），以及所有进一步依赖于这些对象的对象（见\u003ca href=\"/docs/18/ddl-depend.html\" rel=\"nofollow\"\u003e第 5.15 节\u003c/a\u003e）。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eRESTRICT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e如果存在任何依赖对象，则拒绝删除该列或约束。这是默认行为。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要禁用或启用的单个触发器的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eALL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e禁用或启用属于该外部表的所有触发器。（如果其中任何触发器是内部生成的触发器，则需要超级用户权限。核心系统不会向外部表添加这类触发器，但附加代码可能会这么做。）\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eUSER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e禁用或启用属于该外部表的所有触发器，但内部生成的触发器除外。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要与该外部表关联或解除关联的父表。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003enew_owner\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该表的新拥有者的用户名。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003enew_schema\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该表将被移动到的模式名称。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e注解\u003c/h2\u003e\u003cp\u003e关键字\u003ccode\u003eCOLUMN\u003c/code\u003e不影响语义，可以省略。\u003c/p\u003e\u003cp\u003e使用\u003ccode\u003eADD COLUMN\u003c/code\u003e或\u003ccode\u003eDROP COLUMN\u003c/code\u003e添加或移除列，添加\u003ccode\u003eNOT NULL\u003c/code\u003e或\u003ccode\u003eCHECK\u003c/code\u003e约束，或使用\u003ccode\u003eSET DATA TYPE\u003c/code\u003e更改列类型时，不会检查与外部服务器的一致性。用户有责任确保表定义与远端一致。\u003c/p\u003e\u003cp\u003e关于有效参数的进一步说明，请参见 \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\" rel=\"nofollow\"\u003e\u003ccode\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e示例\u003c/h2\u003e\u003cp\u003e要把一列标记为非空：\u003c/p\u003e\u003cpre\u003eALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;\n\u003c/pre\u003e\u003cp\u003e要更改外部表的选项：\u003c/p\u003e\u003cpre\u003eALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 \u0026#39;value\u0026#39;, SET opt2 \u0026#39;value2\u0026#39;, DROP opt3);\n\u003c/pre\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e兼容性\u003c/h2\u003e\u003cp\u003e\u003ccode\u003eADD\u003c/code\u003e、\u003ccode\u003eDROP\u003c/code\u003e和\u003ccode\u003eSET DATA TYPE\u003c/code\u003e 形式符合 SQL 标准。其他形式是 \u003cspan\u003ePostgreSQL\u003c/span\u003e对 SQL 标准的扩展。另外，在单条\u003ccode\u003eALTER FOREIGN TABLE\u003c/code\u003e命令中指定多个修改也是一种扩展。\u003c/p\u003e\u003cp\u003e\u003ccode\u003eALTER FOREIGN TABLE DROP COLUMN\u003c/code\u003e可用于删除外部表的唯一一列，从而留下一个零列的表。这是 SQL 的一种扩展，因为 SQL 不允许零列外部表。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e另见\u003c/h2\u003e\u003cspan\u003e\u003ca href=\"/wiki/sql/create-foreign-table/?v=18\" title=\"CREATE FOREIGN TABLE\" rel=\"nofollow\"\u003e\u003cspan\u003eCREATE FOREIGN TABLE\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/drop-foreign-table/?v=18\" title=\"DROP FOREIGN TABLE\" rel=\"nofollow\"\u003e\u003cspan\u003eDROP FOREIGN TABLE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e\u003c/section\u003e","SourceRevision":"1b5ca64c","ContentHash":"efc49763f27ca4f1c4a48bd504d27e0a737a85a71694ed8247a54530cea13e1f","Payload":{"purpose_zh":"更改外部表的定义","sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eALTER FOREIGN TABLE\u003c/code\u003e更改现有外部表的定义。有几种子形式：\u003c/p\u003e\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eADD [ COLUMN ] [ IF NOT EXISTS ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式使用与 \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\"\u003e\u003ccode class=\"command\"\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e 相同的语法向外部表添加一个新列。如果指定了\u003ccode class=\"literal\"\u003eIF NOT EXISTS\u003c/code\u003e并且已存在同名列，则不会抛出错误。与向普通表添加列的情况不同，底层存储不会发生任何变化：该操作只是声明现在可以通过该外部表访问某个新列。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eDROP [ COLUMN ] [ IF EXISTS ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式从外部表中删除一列。如果该表之外的任何对象依赖于该列，例如视图，则需要指定\u003ccode class=\"literal\"\u003eCASCADE\u003c/code\u003e。如果指定了\u003ccode class=\"literal\"\u003eIF EXISTS\u003c/code\u003e 而该列不存在，则不会抛出错误，而是改为发出一条提示。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET DATA TYPE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式更改外部表中一列的类型。同样，这不会影响任何底层存储：该操作只是更改\u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e认为该列具有的类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET\u003c/code\u003e/\u003ccode class=\"literal\"\u003eDROP DEFAULT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这些形式为列设置或移除默认值。默认值只会应用于后续的 \u003ccode class=\"command\"\u003eINSERT\u003c/code\u003e或\u003ccode class=\"command\"\u003eUPDATE\u003c/code\u003e命令；它们不会导致表中已有的行发生变化。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET\u003c/code\u003e/\u003ccode class=\"literal\"\u003eDROP NOT NULL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e把一列标记为允许或不允许空值。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET STATISTICS\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式为后续 \u003ca href=\"/docs/18/sql-analyze.html\" title=\"ANALYZE\"\u003e\u003ccode class=\"command\"\u003eANALYZE\u003c/code\u003e\u003c/a\u003e操作设置每列的统计信息收集目标。详见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003ccode class=\"command\"\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e的类似形式。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_option\u003c/code\u003e\u003c/em\u003e = \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e [, ... ] )\u003c/code\u003e\u003cbr\u003e\u003c/span\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eRESET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_option\u003c/code\u003e\u003c/em\u003e [, ... ] )\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式设置或重置每个属性的选项。详见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003ccode class=\"command\"\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e的类似形式。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET STORAGE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式设置列的存储模式。详见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003ccode class=\"command\"\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e的类似形式。注意，除非该表的外部数据包装器选择理会该设置，否则存储模式不会产生效果。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eADD \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_constraint\u003c/code\u003e\u003c/em\u003e [ NOT VALID ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式使用与 \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\"\u003e\u003ccode class=\"command\"\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e 相同的语法为外部表添加一个新约束。目前只支持 \u003ccode class=\"literal\"\u003eCHECK\u003c/code\u003e和\u003ccode class=\"literal\"\u003eNOT NULL\u003c/code\u003e约束。\u003c/p\u003e\u003cp\u003e与向普通表添加约束的情况不同，不会采取任何措施来验证该约束是否正确；该操作只是声明应当假定外部表中的所有行都满足某个新条件。（参见 \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\"\u003e\u003ccode class=\"command\"\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e 中的讨论。）如果约束被标记为\u003ccode class=\"literal\"\u003eNOT VALID\u003c/code\u003e（仅在\u003ccode class=\"literal\"\u003eCHECK\u003c/code\u003e 的情况下允许），则不会假定它成立，而只是将其记录下来供将来可能使用。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eVALIDATE CONSTRAINT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式把先前被标记为\u003ccode class=\"literal\"\u003eNOT VALID\u003c/code\u003e的约束标记为有效。不会采取任何措施来验证该约束，但未来的查询会假定它成立。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eDROP CONSTRAINT [ IF EXISTS ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式删除外部表上指定的约束。如果指定了\u003ccode class=\"literal\"\u003eIF EXISTS\u003c/code\u003e 而该约束不存在，则不会抛出错误，而是改为发出一条提示。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eDISABLE\u003c/code\u003e/\u003ccode class=\"literal\"\u003eENABLE [ REPLICA | ALWAYS ] TRIGGER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这些形式配置属于该外部表的触发器的触发方式。详见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003ccode class=\"command\"\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e的类似形式。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET WITHOUT OIDS\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这是用于移除\u003ccode class=\"literal\"\u003eoid\u003c/code\u003e系统列的向后兼容语法。由于如今已无法再添加\u003ccode class=\"literal\"\u003eoid\u003c/code\u003e系统列，因此它实际上永远不会产生任何效果。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eINHERIT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式把目标外部表添加为指定父表的一个新子表。详见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003ccode class=\"command\"\u003eALTER TABLE\u003c/code\u003e\u003c/a\u003e的类似形式。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eNO INHERIT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式把目标外部表从指定父表的子表列表中移除。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eOWNER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式把外部表的拥有者更改为指定用户。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eOPTIONS ( [ ADD | SET | DROP ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoption\u003c/code\u003e\u003c/em\u003e ['\u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e'] [, ... ] )\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e更改外部表或其某一列的选项。\u003ccode class=\"literal\"\u003eADD\u003c/code\u003e、\u003ccode class=\"literal\"\u003eSET\u003c/code\u003e 和\u003ccode class=\"literal\"\u003eDROP\u003c/code\u003e指定要执行的动作。如果没有显式指定操作，则默认是 \u003ccode class=\"literal\"\u003eADD\u003c/code\u003e。不允许重复的选项名（不过表选项和列选项同名是可以的）。选项名和值也会通过外部数据包装器库进行验证。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eRENAME\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e\u003ccode class=\"literal\"\u003eRENAME\u003c/code\u003e形式更改外部表的名称，或者更改其中某一列的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET SCHEMA\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该形式把外部表移动到另一个模式中。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e\u003cp\u003e除了\u003ccode class=\"literal\"\u003eRENAME\u003c/code\u003e和\u003ccode class=\"literal\"\u003eSET SCHEMA\u003c/code\u003e之外，所有动作都可以组合在一个包含多项修改的列表中一并应用。例如，可以在一条命令中添加多个列和/或更改多个列的类型。\u003c/p\u003e\u003cp\u003e如果命令写成\u003ccode class=\"literal\"\u003eALTER FOREIGN TABLE IF EXISTS ...\u003c/code\u003e而外部表不存在，则不会抛出错误。这种情况下会发出一个提示。\u003c/p\u003e\u003cp\u003e你必须拥有该表才能使用\u003ccode class=\"command\"\u003eALTER FOREIGN TABLE\u003c/code\u003e。要更改外部表的模式，你还必须在新模式上具有\u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e权限。要更改拥有者，你必须能够对新的所有者角色执行\u003ccode class=\"literal\"\u003eSET ROLE\u003c/code\u003e，并且该角色必须在该表所在模式上具有\u003ccode class=\"literal\"\u003eCREATE\u003c/code\u003e权限。（这些限制确保更改拥有者不会做出任何你无法通过删除并重新创建该表来完成的事情。不过，超级用户仍然可以更改任何表的所有权。）要添加列或更改列类型，你还必须在该数据类型上具有\u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e权限。\u003c/p\u003e","key":"description","title":"描述"},{"html":"\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要修改的现有外部表的名称（可以带模式限定）。如果在表名前指定了 \u003ccode class=\"literal\"\u003eONLY\u003c/code\u003e，则只修改该表。如果未指定\u003ccode class=\"literal\"\u003eONLY\u003c/code\u003e，则该表及其所有后代表（如果有）都会被修改。也可以在表名后指定 \u003ccode class=\"literal\"\u003e*\u003c/code\u003e，显式表示包括后代表。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e新列或现有列的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_column_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e现有列的新名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e表的新名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003edata_type\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e新列的数据类型，或现有列的新数据类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_constraint\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该外部表的新表约束。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要删除的现有约束的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eCASCADE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e自动删除依赖于被删除列或约束的对象（例如引用该列的视图），以及所有进一步依赖于这些对象的对象（见\u003ca href=\"/docs/18/ddl-depend.html\" title=\"5.15. 依赖跟踪\"\u003e第 5.15 节\u003c/a\u003e）。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eRESTRICT\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e如果存在任何依赖对象，则拒绝删除该列或约束。这是默认行为。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要禁用或启用的单个触发器的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eALL\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e禁用或启用属于该外部表的所有触发器。（如果其中任何触发器是内部生成的触发器，则需要超级用户权限。核心系统不会向外部表添加这类触发器，但附加代码可能会这么做。）\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eUSER\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e禁用或启用属于该外部表的所有触发器，但内部生成的触发器除外。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e要与该外部表关联或解除关联的父表。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_owner\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该表的新拥有者的用户名。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_schema\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e该表将被移动到的模式名称。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"参数"},{"html":"\u003cp\u003e关键字\u003ccode class=\"literal\"\u003eCOLUMN\u003c/code\u003e不影响语义，可以省略。\u003c/p\u003e\u003cp\u003e使用\u003ccode class=\"literal\"\u003eADD COLUMN\u003c/code\u003e或\u003ccode class=\"literal\"\u003eDROP COLUMN\u003c/code\u003e添加或移除列，添加\u003ccode class=\"literal\"\u003eNOT NULL\u003c/code\u003e或\u003ccode class=\"literal\"\u003eCHECK\u003c/code\u003e约束，或使用\u003ccode class=\"literal\"\u003eSET DATA TYPE\u003c/code\u003e更改列类型时，不会检查与外部服务器的一致性。用户有责任确保表定义与远端一致。\u003c/p\u003e\u003cp\u003e关于有效参数的进一步说明，请参见 \u003ca href=\"/docs/18/sql-createforeigntable.html\" title=\"CREATE FOREIGN TABLE\"\u003e\u003ccode class=\"command\"\u003eCREATE FOREIGN TABLE\u003c/code\u003e\u003c/a\u003e。\u003c/p\u003e","key":"notes","title":"注解"},{"html":"\u003cp\u003e要把一列标记为非空：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER FOREIGN TABLE distributors ALTER COLUMN street SET NOT NULL;\n\u003c/pre\u003e\u003cp\u003e要更改外部表的选项：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER FOREIGN TABLE myschema.distributors OPTIONS (ADD opt1 'value', SET opt2 'value2', DROP opt3);\n\u003c/pre\u003e","key":"examples","title":"示例"},{"html":"\u003cp\u003e\u003ccode class=\"literal\"\u003eADD\u003c/code\u003e、\u003ccode class=\"literal\"\u003eDROP\u003c/code\u003e和\u003ccode class=\"literal\"\u003eSET DATA TYPE\u003c/code\u003e 形式符合 SQL 标准。其他形式是 \u003cspan class=\"productname\"\u003ePostgreSQL\u003c/span\u003e对 SQL 标准的扩展。另外，在单条\u003ccode class=\"command\"\u003eALTER FOREIGN TABLE\u003c/code\u003e命令中指定多个修改也是一种扩展。\u003c/p\u003e\u003cp\u003e\u003ccode class=\"command\"\u003eALTER FOREIGN TABLE DROP COLUMN\u003c/code\u003e可用于删除外部表的唯一一列，从而留下一个零列的表。这是 SQL 的一种扩展，因为 SQL 不允许零列外部表。\u003c/p\u003e","key":"compatibility","title":"兼容性"},{"html":"\u003cspan class=\"simplelist\"\u003e\u003ca href=\"/wiki/sql/create-foreign-table/?v=18\" title=\"CREATE FOREIGN TABLE\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE FOREIGN TABLE\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/drop-foreign-table/?v=18\" title=\"DROP FOREIGN TABLE\"\u003e\u003cspan class=\"refentrytitle\"\u003eDROP FOREIGN TABLE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e","key":"see_also","title":"另见"}],"sections_same_as":"","synopsis_html":"ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ * ]\n    \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaction\u003c/code\u003e\u003c/em\u003e [, ... ]\nALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e [ * ]\n    RENAME [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_column_name\u003c/code\u003e\u003c/em\u003e\nALTER FOREIGN TABLE [ IF EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\n    RENAME TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_name\u003c/code\u003e\u003c/em\u003e\nALTER FOREIGN TABLE [ IF EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e\n    SET SCHEMA \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_schema\u003c/code\u003e\u003c/em\u003e\n\n\u003cspan class=\"phrase\"\u003e其中 \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaction\u003c/code\u003e\u003c/em\u003e 是以下之一：\u003c/span\u003e\n\n    ADD [ COLUMN ] [ IF NOT EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e \u003cem class=\"replaceable\"\u003e\u003ccode\u003edata_type\u003c/code\u003e\u003c/em\u003e [ COLLATE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecollation\u003c/code\u003e\u003c/em\u003e ] [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_constraint\u003c/code\u003e\u003c/em\u003e [ ... ] ]\n    DROP [ COLUMN ] [ IF EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e [ RESTRICT | CASCADE ]\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e [ SET DATA ] TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003edata_type\u003c/code\u003e\u003c/em\u003e [ COLLATE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecollation\u003c/code\u003e\u003c/em\u003e ]\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e SET DEFAULT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eexpression\u003c/code\u003e\u003c/em\u003e\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e DROP DEFAULT\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e { SET | DROP } NOT NULL\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e SET STATISTICS \u003cem class=\"replaceable\"\u003e\u003ccode\u003einteger\u003c/code\u003e\u003c/em\u003e\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e SET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_option\u003c/code\u003e\u003c/em\u003e = \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e [, ... ] )\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e RESET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_option\u003c/code\u003e\u003c/em\u003e [, ... ] )\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }\n    ALTER [ COLUMN ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003ecolumn_name\u003c/code\u003e\u003c/em\u003e OPTIONS ( [ ADD | SET | DROP ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoption\u003c/code\u003e\u003c/em\u003e ['\u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e'] [, ... ])\n    ADD \u003cem class=\"replaceable\"\u003e\u003ccode\u003etable_constraint\u003c/code\u003e\u003c/em\u003e [ NOT VALID ]\n    VALIDATE CONSTRAINT \u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e\n    DROP CONSTRAINT [ IF EXISTS ]  \u003cem class=\"replaceable\"\u003e\u003ccode\u003econstraint_name\u003c/code\u003e\u003c/em\u003e [ RESTRICT | CASCADE ]\n    DISABLE TRIGGER [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e | ALL | USER ]\n    ENABLE TRIGGER [ \u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e | ALL | USER ]\n    ENABLE REPLICA TRIGGER \u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e\n    ENABLE ALWAYS TRIGGER \u003cem class=\"replaceable\"\u003e\u003ccode\u003etrigger_name\u003c/code\u003e\u003c/em\u003e\n    SET WITHOUT OIDS\n    INHERIT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\n    NO INHERIT \u003cem class=\"replaceable\"\u003e\u003ccode\u003eparent_table\u003c/code\u003e\u003c/em\u003e\n    OWNER TO { \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_owner\u003c/code\u003e\u003c/em\u003e | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\n    OPTIONS ( [ ADD | SET | DROP ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eoption\u003c/code\u003e\u003c/em\u003e ['\u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e'] [, ... ])","synopsis_text":"ALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]\naction [, ... ]\nALTER FOREIGN TABLE [ IF EXISTS ] [ ONLY ] name [ * ]\nRENAME [ COLUMN ] column_name TO new_column_name\nALTER FOREIGN TABLE [ IF EXISTS ] name\nRENAME TO new_name\nALTER FOREIGN TABLE [ IF EXISTS ] name\nSET SCHEMA new_schema\n其中 action 是以下之一：\n\nADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]\nDROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]\nALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ]\nALTER [ COLUMN ] column_name SET DEFAULT expression\nALTER [ COLUMN ] column_name DROP DEFAULT\nALTER [ COLUMN ] column_name { SET | DROP } NOT NULL\nALTER [ COLUMN ] column_name SET STATISTICS integer\nALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )\nALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )\nALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }\nALTER [ COLUMN ] column_name OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])\nADD table_constraint [ NOT VALID ]\nVALIDATE CONSTRAINT constraint_name\nDROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]\nDISABLE TRIGGER [ trigger_name | ALL | USER ]\nENABLE TRIGGER [ trigger_name | ALL | USER ]\nENABLE REPLICA TRIGGER trigger_name\nENABLE ALWAYS TRIGGER trigger_name\nSET WITHOUT OIDS\nINHERIT parent_table\nNO INHERIT parent_table\nOWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nOPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ])"}},"RequestedLocale":"zh-Hans","Fallback":false,"Versions":["10","11","12","13","14","15","16","17","18","19","20","9.1","9.2","9.3","9.4","9.5","9.6"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
