{"Entry":{"collection":"sql","key":"alter-type","name":"ALTER TYPE","aliases":["altertype"],"metadata":{"aliases":["altertype"],"changed_in":["8.1","8.4","9.1","9.3","9.5","10","13","14"],"changes":[{"from":"7.4","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":[],"removed":[]},"status":"added","synopsis":null,"to":"8.0"},{"from":"8.0","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","examples"],"removed":[]},"status":"changed","synopsis":{"added":["ALTER TYPE name SET SCHEMA new_schema"],"removed":[]},"to":"8.1"},{"from":"8.3","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","examples"],"removed":[]},"status":"changed","synopsis":{"added":["ALTER TYPE name RENAME TO new_name"],"removed":[]},"to":"8.4"},{"from":"9.0","purpose_changed":false,"renamed":null,"sections":{"added":["notes","see_also"],"changed":["description","parameters","examples","compatibility"],"removed":[]},"status":"changed","synopsis":{"added":["ALTER TYPE name action [, ... ]","ALTER TYPE name OWNER TO new_owner","ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]","ALTER TYPE name SET SCHEMA new_schema","ALTER TYPE name ADD VALUE new_enum_value [ { BEFORE | AFTER } existing_enum_value ]","ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]","DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ]","ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]"],"removed":["ALTER TYPE name OWNER TO new_owner","ALTER TYPE name SET SCHEMA new_schema"]},"to":"9.1"},{"from":"9.1","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"9.2"},{"from":"9.2","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":{"added":["ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } existing_enum_value ]"],"removed":[]},"to":"9.3"},{"from":"9.4","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":[],"removed":[]},"status":"changed","synopsis":{"added":["ALTER TYPE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }"],"removed":[]},"to":"9.5"},{"from":"9.6","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","notes","examples"],"removed":[]},"status":"changed","synopsis":{"added":["ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]","ALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value"],"removed":["ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } existing_enum_value ]"]},"to":"10"},{"from":"10","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["notes"],"removed":[]},"status":"changed","synopsis":null,"to":"11"},{"from":"11","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["notes"],"removed":[]},"status":"changed","synopsis":null,"to":"12"},{"from":"12","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description","parameters","examples"],"removed":[]},"status":"changed","synopsis":{"added":["ALTER TYPE name RENAME TO new_name","ALTER TYPE name SET SCHEMA new_schema","ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]","ALTER TYPE name action [, ... ]","ALTER TYPE name SET ( property = value [, ... ] )"],"removed":["ALTER TYPE name action [, ... ]","ALTER TYPE name RENAME TO new_name","ALTER TYPE name SET SCHEMA new_schema"]},"to":"13"},{"from":"13","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":{"added":["ALTER TYPE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }"],"removed":[]},"to":"14"},{"from":"14","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"15"},{"from":"15","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"removed":[]},"status":"changed","synopsis":null,"to":"16"},{"from":"16","purpose_changed":false,"renamed":null,"sections":{"added":[],"changed":["description"],"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"}],"content_hash":"e91d47dec4627b18f3febe1dd8110f15616b7a94c9050f7d2f3f63aed7fc4753","editorial":{},"first_version":"8.0","group":"type","imported_at":"2026-09-30T17:43:37.703625+08:00","last_version":"20","name":"ALTER TYPE","object":"TYPE","position":3021,"present_in":["8.0","8.1","8.2","8.3","8.4","9.0","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 type","purpose_zh":"","related":["create-type","drop-type"],"slug":"alter-type","source_rev":"a709ab85","synopsis":"ALTER TYPE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER TYPE name RENAME TO new_name\nALTER TYPE name SET SCHEMA new_schema\nALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]\nALTER TYPE name action [, ... ]\nALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]\nALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value\nALTER TYPE name SET ( property = value [, ... ] )\n\nwhere action is one of:\n\nADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]\nDROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ]\nALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]","verb":"ALTER"}},"Definition":{"Collection":"sql","Key":"alter-type","SourceDatabase":"center","Version":"18","SourceTable":"sqlcmd","SourceKey":"alter-type","SourceRevision":"a709ab85","Facts":{"anchor":"SQL-ALTERTYPE","file":"sql-altertype.html","lang":"en","name":"ALTER TYPE","purpose":"change the definition of a type","purpose_zh":"","related":["create-type","drop-type"],"sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eALTER TYPE\u003c/code\u003e changes the definition of an existing type. There are several subforms:\u003c/p\u003e\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\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 type.\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\u003eThis form changes the name of the type.\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 type into another schema.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eRENAME ATTRIBUTE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form is only usable with composite types. It changes the name of an individual attribute of the type.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eADD ATTRIBUTE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form adds a new attribute to a composite type, using the same syntax as \u003ca href=\"/docs/18/sql-createtype.html\" title=\"CREATE TYPE\"\u003e\u003ccode class=\"command\"\u003eCREATE TYPE\u003c/code\u003e\u003c/a\u003e.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eDROP ATTRIBUTE [ IF EXISTS ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form drops an attribute from a composite type. If \u003ccode class=\"literal\"\u003eIF EXISTS\u003c/code\u003e is specified and the attribute 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\"\u003eALTER ATTRIBUTE ... SET DATA TYPE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form changes the type of an attribute of a composite type.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eADD VALUE [ IF NOT EXISTS ] [ BEFORE | AFTER ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form adds a new value to an enum type. The new value's place in the enum's ordering can be specified as being \u003ccode class=\"literal\"\u003eBEFORE\u003c/code\u003e or \u003ccode class=\"literal\"\u003eAFTER\u003c/code\u003e one of the existing values. Otherwise, the new item is added at the end of the list of values.\u003c/p\u003e\u003cp\u003eIf \u003ccode class=\"literal\"\u003eIF NOT EXISTS\u003c/code\u003e is specified, it is not an error if the type already contains the new value: a notice is issued but no other action is taken. Otherwise, an error will occur if the new value is already present.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eRENAME VALUE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThis form renames a value of an enum type. The value's place in the enum's ordering is not affected. An error will occur if the specified value is not present or the new name is already present.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eSET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eproperty\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\u003eThis form is only applicable to base types. It allows adjustment of a subset of the base-type properties that can be set in \u003ccode class=\"command\"\u003eCREATE TYPE\u003c/code\u003e. Specifically, these properties can be changed:\u003c/p\u003e\u003cdiv class=\"itemizedlist\"\u003e\u003cul class=\"itemizedlist\"\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e\u003ccode class=\"literal\"\u003eRECEIVE\u003c/code\u003e can be set to the name of a binary input function, or \u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e to remove the type's binary input function. Using this option requires superuser privilege.\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e\u003ccode class=\"literal\"\u003eSEND\u003c/code\u003e can be set to the name of a binary output function, or \u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e to remove the type's binary output function. Using this option requires superuser privilege.\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e\u003ccode class=\"literal\"\u003eTYPMOD_IN\u003c/code\u003e can be set to the name of a type modifier input function, or \u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e to remove the type's type modifier input function. Using this option requires superuser privilege.\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e\u003ccode class=\"literal\"\u003eTYPMOD_OUT\u003c/code\u003e can be set to the name of a type modifier output function, or \u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e to remove the type's type modifier output function. Using this option requires superuser privilege.\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e\u003ccode class=\"literal\"\u003eANALYZE\u003c/code\u003e can be set to the name of a type-specific statistics collection function, or \u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e to remove the type's statistics collection function. Using this option requires superuser privilege.\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e\u003ccode class=\"literal\"\u003eSUBSCRIPT\u003c/code\u003e can be set to the name of a type-specific subscripting handler function, or \u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e to remove the type's subscripting handler function. Using this option requires superuser privilege.\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e\u003ccode class=\"literal\"\u003eSTORAGE\u003c/code\u003e can be set to \u003ccode class=\"literal\"\u003eplain\u003c/code\u003e, \u003ccode class=\"literal\"\u003eextended\u003c/code\u003e, \u003ccode class=\"literal\"\u003eexternal\u003c/code\u003e, or \u003ccode class=\"literal\"\u003emain\u003c/code\u003e (see \u003ca href=\"/docs/18/storage-toast.html\" title=\"66.2. TOAST\"\u003eSection 66.2\u003c/a\u003e for more information about what these mean). However, changing from \u003ccode class=\"literal\"\u003eplain\u003c/code\u003e to another setting requires superuser privilege (because it requires that the type's C functions all be TOAST-ready), and changing to \u003ccode class=\"literal\"\u003eplain\u003c/code\u003e from another setting is not allowed at all (since the type may already have TOASTed values present in the database). Note that changing this option doesn't by itself change any stored data, it just sets the default TOAST strategy to be used for table columns created in the future. See \u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003cspan class=\"refentrytitle\"\u003eALTER TABLE\u003c/span\u003e\u003c/a\u003e to change the TOAST strategy for existing table columns.\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cp\u003eSee \u003ca href=\"/docs/18/sql-createtype.html\" title=\"CREATE TYPE\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE TYPE\u003c/span\u003e\u003c/a\u003e for more details about these type properties. Note that where appropriate, a change in these properties for a base type will be propagated automatically to domains based on that type.\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e\u003cp\u003eThe \u003ccode class=\"literal\"\u003eADD ATTRIBUTE\u003c/code\u003e, \u003ccode class=\"literal\"\u003eDROP ATTRIBUTE\u003c/code\u003e, and \u003ccode class=\"literal\"\u003eALTER ATTRIBUTE\u003c/code\u003e actions can be combined into a list of multiple alterations to apply in parallel. For example, it is possible to add several attributes and/or alter the type of several attributes in a single command.\u003c/p\u003e\u003cp\u003eYou must own the type to use \u003ccode class=\"command\"\u003eALTER TYPE\u003c/code\u003e. To change the schema of a type, 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 type's schema. (These restrictions enforce that altering the owner doesn't do anything you couldn't do by dropping and recreating the type. However, a superuser can alter ownership of any type anyway.) To add an attribute or alter an attribute type, you must also have \u003ccode class=\"literal\"\u003eUSAGE\u003c/code\u003e privilege on the attribute's 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 type to alter.\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\u003eThe new name for the type.\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 type.\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 new schema for the type.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of the attribute to add, alter, or drop.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_attribute_name\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe new name of the attribute to be renamed.\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\u003eThe data type of the attribute to add, or the new type of the attribute to alter.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_enum_value\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe new value to be added to an enum type's list of values, or the new name to be given to an existing value. Like all enum literals, it needs to be quoted.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eneighbor_enum_value\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe existing enum value that the new value should be added immediately before or after in the enum type's sort ordering. Like all enum literals, it needs to be quoted.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eexisting_enum_value\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe existing enum value that should be renamed. Like all enum literals, it needs to be quoted.\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003eThe name of a base-type property to be modified; see above for possible values.\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 propagate the operation to typed tables of the type being altered, and their descendants.\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 the operation if the type being altered is the type of a typed table. This is the default.\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"Parameters"},{"html":"\u003cp\u003eIf \u003ccode class=\"command\"\u003eALTER TYPE ... ADD VALUE\u003c/code\u003e (the form that adds a new value to an enum type) is executed inside a transaction block, the new value cannot be used until after the transaction has been committed.\u003c/p\u003e\u003cp\u003eComparisons involving an added enum value will sometimes be slower than comparisons involving only original members of the enum type. This will usually only occur if \u003ccode class=\"literal\"\u003eBEFORE\u003c/code\u003e or \u003ccode class=\"literal\"\u003eAFTER\u003c/code\u003e is used to set the new value's sort position somewhere other than at the end of the list. However, sometimes it will happen even though the new value is added at the end (this occurs if the OID counter \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003ewrapped around\u003c/span\u003e”\u003c/span\u003e since the original creation of the enum type). The slowdown is usually insignificant; but if it matters, optimal performance can be regained by dropping and recreating the enum type, or by dumping and restoring the database.\u003c/p\u003e","key":"notes","title":"Notes"},{"html":"\u003cp\u003eTo rename a data type:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE electronic_mail RENAME TO email;\n\u003c/pre\u003e\u003cp\u003eTo change the owner of the type \u003ccode class=\"literal\"\u003eemail\u003c/code\u003e to \u003ccode class=\"literal\"\u003ejoe\u003c/code\u003e:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE email OWNER TO joe;\n\u003c/pre\u003e\u003cp\u003eTo change the schema of the type \u003ccode class=\"literal\"\u003eemail\u003c/code\u003e to \u003ccode class=\"literal\"\u003ecustomers\u003c/code\u003e:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE email SET SCHEMA customers;\n\u003c/pre\u003e\u003cp\u003eTo add a new attribute to a composite type:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE compfoo ADD ATTRIBUTE f3 int;\n\u003c/pre\u003e\u003cp\u003eTo add a new value to an enum type in a particular sort position:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE colors ADD VALUE 'orange' AFTER 'red';\n\u003c/pre\u003e\u003cp\u003eTo rename an enum value:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE colors RENAME VALUE 'purple' TO 'mauve';\n\u003c/pre\u003e\u003cp\u003eTo create binary I/O functions for an existing base type:\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eCREATE FUNCTION mytypesend(mytype) RETURNS bytea ...;\nCREATE FUNCTION mytyperecv(internal, oid, integer) RETURNS mytype ...;\nALTER TYPE mytype SET (\n    SEND = mytypesend,\n    RECEIVE = mytyperecv\n);\n\u003c/pre\u003e","key":"examples","title":"Examples"},{"html":"\u003cp\u003eThe variants to add and drop attributes are part of the SQL standard; the other variants are PostgreSQL extensions.\u003c/p\u003e","key":"compatibility","title":"Compatibility"},{"html":"\u003cspan class=\"simplelist\"\u003e\u003ca href=\"/wiki/sql/create-type/?v=18\" title=\"CREATE TYPE\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE TYPE\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/drop-type/?v=18\" title=\"DROP TYPE\"\u003e\u003cspan class=\"refentrytitle\"\u003eDROP TYPE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e","key":"see_also","title":"See Also"}],"sections_same_as":"","slug":"18","synopsis_html":"ALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e OWNER TO { \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_owner\u003c/code\u003e\u003c/em\u003e | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e RENAME TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_name\u003c/code\u003e\u003c/em\u003e\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e SET SCHEMA \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_schema\u003c/code\u003e\u003c/em\u003e\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e RENAME ATTRIBUTE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_name\u003c/code\u003e\u003c/em\u003e TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_attribute_name\u003c/code\u003e\u003c/em\u003e [ CASCADE | RESTRICT ]\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaction\u003c/code\u003e\u003c/em\u003e [, ... ]\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e ADD VALUE [ IF NOT EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_enum_value\u003c/code\u003e\u003c/em\u003e [ { BEFORE | AFTER } \u003cem class=\"replaceable\"\u003e\u003ccode\u003eneighbor_enum_value\u003c/code\u003e\u003c/em\u003e ]\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e RENAME VALUE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eexisting_enum_value\u003c/code\u003e\u003c/em\u003e TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_enum_value\u003c/code\u003e\u003c/em\u003e\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e SET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e = \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\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 ATTRIBUTE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_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 ] [ CASCADE | RESTRICT ]\n    DROP ATTRIBUTE [ IF EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_name\u003c/code\u003e\u003c/em\u003e [ CASCADE | RESTRICT ]\n    ALTER ATTRIBUTE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_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 ] [ CASCADE | RESTRICT ]","synopsis_text":"ALTER TYPE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER TYPE name RENAME TO new_name\nALTER TYPE name SET SCHEMA new_schema\nALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]\nALTER TYPE name action [, ... ]\nALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]\nALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value\nALTER TYPE name SET ( property = value [, ... ] )\n\nwhere action is one of:\n\nADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]\nDROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ]\nALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]"},"ManualEvidence":{},"MeasuredEvidence":{}},"Text":{"Collection":"sql","Key":"alter-type","SourceDatabase":"pgweb","Version":"18","Locale":"zh-Hans","Title":"ALTER TYPE","Summary":"更改类型的定义","BodyHTML":"\u003cpre\u003eALTER TYPE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER TYPE name RENAME TO new_name\nALTER TYPE name SET SCHEMA new_schema\nALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]\nALTER TYPE name action [, ... ]\nALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]\nALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value\nALTER TYPE name SET ( property = value [, ... ] )\n\n其中 action 可以是以下之一：\n\nADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]\nDROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ]\nALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]\u003c/pre\u003e\u003csection\u003e\u003ch2\u003e描述\u003c/h2\u003e\u003cp\u003e\u003ccode\u003eALTER TYPE\u003c/code\u003e 更改现有类型的定义。它有以下几种子形式：\u003c/p\u003e\u003cdiv\u003e\u003cdl\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\u003eRENAME\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 SCHEMA\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这种形式将类型移动到另一个模式中。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eRENAME ATTRIBUTE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这种形式只能用于复合类型。它会更改该类型某个属性的名称。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eADD ATTRIBUTE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这种形式向复合类型添加一个新属性，其语法与 \u003ca href=\"/docs/18/sql-createtype.html\" title=\"CREATE TYPE\" rel=\"nofollow\"\u003e\u003ccode\u003eCREATE TYPE\u003c/code\u003e\u003c/a\u003e 相同。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eDROP ATTRIBUTE [ 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\u003eALTER ATTRIBUTE ... SET DATA TYPE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这种形式更改复合类型中某个属性的数据类型。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eADD VALUE [ IF NOT EXISTS ] [ BEFORE | AFTER ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这种形式向枚举类型中添加一个新值。可以用 \u003ccode\u003eBEFORE\u003c/code\u003e 或 \u003ccode\u003eAFTER\u003c/code\u003e 指定该新值在枚举排序中的位置，即位于某个现有值之前或之后。否则，新项会被添加到值列表的末尾。\u003c/p\u003e\u003cp\u003e如果指定了 \u003ccode\u003eIF NOT EXISTS\u003c/code\u003e，而该类型已经包含该新值，则不会报错：系统会发出一条提示，但不会执行任何其他操作。否则，如果该新值已存在，就会报错。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan\u003e\u003ccode\u003eRENAME VALUE\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 ( \u003cem\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e = \u003cem\u003e\u003ccode\u003evalue\u003c/code\u003e\u003c/em\u003e [, ... ] )\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这种形式仅适用于基础类型。它允许调整可在 \u003ccode\u003eCREATE TYPE\u003c/code\u003e 中设置的一部分基础类型属性。具体可以更改的属性如下：\u003c/p\u003e\u003cdiv\u003e\u003cul\u003e\u003cli\u003e\u003cp\u003e可以将\u003ccode\u003eRECEIVE\u003c/code\u003e设置为二进制输入函数的名称，或者设置为\u003ccode\u003eNONE\u003c/code\u003e以移除该类型的二进制输入函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e可以将\u003ccode\u003eSEND\u003c/code\u003e设置为二进制输出函数的名称，或者设置为\u003ccode\u003eNONE\u003c/code\u003e以移除该类型的二进制输出函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e可以将\u003ccode\u003eTYPMOD_IN\u003c/code\u003e设置为类型修饰符输入函数的名称，或者设置为\u003ccode\u003eNONE\u003c/code\u003e以移除该类型的类型修饰符输入函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e可以将\u003ccode\u003eTYPMOD_OUT\u003c/code\u003e设置为类型修饰符输出函数的名称，或者设置为\u003ccode\u003eNONE\u003c/code\u003e以移除该类型的类型修饰符输出函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e可以将\u003ccode\u003eANALYZE\u003c/code\u003e设置为类型专用的统计信息收集函数的名称，或者设置为\u003ccode\u003eNONE\u003c/code\u003e以移除该类型的统计信息收集函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e可以将\u003ccode\u003eSUBSCRIPT\u003c/code\u003e设置为类型专用的下标处理函数的名称，或者设置为\u003ccode\u003eNONE\u003c/code\u003e以移除该类型的下标处理函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli\u003e\u003cp\u003e可以将\u003ccode\u003eSTORAGE\u003c/code\u003e设置为\u003ccode\u003eplain\u003c/code\u003e、\u003ccode\u003eextended\u003c/code\u003e、\u003ccode\u003eexternal\u003c/code\u003e或 \u003ccode\u003emain\u003c/code\u003e（关于这些设置含义的更多信息，见\u003ca href=\"/docs/18/storage-toast.html\" rel=\"nofollow\"\u003e第 66.2 节\u003c/a\u003e）。但是，从\u003ccode\u003eplain\u003c/code\u003e改为其他设置需要超级用户权限（因为这要求该类型的 C 函数全部都能处理 TOAST），而从其他设置改为 \u003ccode\u003eplain\u003c/code\u003e则完全不允许（因为数据库中可能已经存在该类型经过 TOAST 处理的值）。请注意，更改该选项本身不会改变任何已存储的数据，它只是为将来创建的表列设置默认的 TOAST 策略。要更改现有表列的 TOAST 策略，请参见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\" rel=\"nofollow\"\u003e\u003cspan\u003eALTER TABLE\u003c/span\u003e\u003c/a\u003e。\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cp\u003e关于这些类型属性的更多细节，请参见\u003ca href=\"/docs/18/sql-createtype.html\" title=\"CREATE TYPE\" rel=\"nofollow\"\u003e\u003cspan\u003eCREATE TYPE\u003c/span\u003e\u003c/a\u003e。请注意，在适当情况下，对基础类型这些属性的更改会自动传播到基于该类型的域。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003eADD ATTRIBUTE\u003c/code\u003e、\u003ccode\u003eDROP ATTRIBUTE\u003c/code\u003e 和 \u003ccode\u003eALTER ATTRIBUTE\u003c/code\u003e 操作可以组合成一个包含多项修改的列表，以便并行应用。例如，可以在一条命令中添加多个属性和/或更改多个属性的数据类型。\u003c/p\u003e\u003cp\u003e要使用 \u003ccode\u003eALTER TYPE\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要修改的现有类型的名称（可以是模式限定的）。\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\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\u003cdt\u003e\u003cspan\u003e\u003cem\u003e\u003ccode\u003eattribute_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_attribute_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\u003enew_enum_value\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\u003eneighbor_enum_value\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\u003eexisting_enum_value\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\u003eproperty\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自动将该操作传播到正在修改的类型的类型化表及其后代。\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\u003c/dl\u003e\u003c/div\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e注解\u003c/h2\u003e\u003cp\u003e如果在事务块中执行 \u003ccode\u003eALTER TYPE ... ADD VALUE\u003c/code\u003e（即向枚举类型添加新值的形式），则在事务提交之后才能使用该新值。\u003c/p\u003e\u003cp\u003e涉及新增枚举值的比较有时会比仅涉及该枚举类型原有成员的比较更慢。这通常只会在使用 \u003ccode\u003eBEFORE\u003c/code\u003e 或 \u003ccode\u003eAFTER\u003c/code\u003e 将新值的排序位置设在列表末尾之外时发生。不过，即使新值被添加到末尾，有时也会出现这种情况（如果自最初创建该枚举类型以来 OID 计数器已经\u003cspan\u003e“\u003cspan\u003e回卷\u003c/span\u003e”\u003c/span\u003e，就会发生这种情况）。这种变慢通常无关紧要；但如果它确实重要，可以通过删除并重新创建该枚举类型，或者转储并恢复数据库，来恢复最佳性能。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e示例\u003c/h2\u003e\u003cp\u003e要重命名一个数据类型：\u003c/p\u003e\u003cpre\u003eALTER TYPE electronic_mail RENAME TO email;\n\u003c/pre\u003e\u003cp\u003e要将类型\u003ccode\u003eemail\u003c/code\u003e的拥有者改为 \u003ccode\u003ejoe\u003c/code\u003e：\u003c/p\u003e\u003cpre\u003eALTER TYPE email OWNER TO joe;\n\u003c/pre\u003e\u003cp\u003e要将类型\u003ccode\u003eemail\u003c/code\u003e所在的模式改为 \u003ccode\u003ecustomers\u003c/code\u003e：\u003c/p\u003e\u003cpre\u003eALTER TYPE email SET SCHEMA customers;\n\u003c/pre\u003e\u003cp\u003e要向一个复合类型添加一个新属性：\u003c/p\u003e\u003cpre\u003eALTER TYPE compfoo ADD ATTRIBUTE f3 int;\n\u003c/pre\u003e\u003cp\u003e要在枚举类型的特定排序位置添加一个新值：\u003c/p\u003e\u003cpre\u003eALTER TYPE colors ADD VALUE \u0026#39;orange\u0026#39; AFTER \u0026#39;red\u0026#39;;\n\u003c/pre\u003e\u003cp\u003e要重命名一个枚举值：\u003c/p\u003e\u003cpre\u003eALTER TYPE colors RENAME VALUE \u0026#39;purple\u0026#39; TO \u0026#39;mauve\u0026#39;;\n\u003c/pre\u003e\u003cp\u003e要为现有基础类型创建二进制 I/O 函数：\u003c/p\u003e\u003cpre\u003eCREATE FUNCTION mytypesend(mytype) RETURNS bytea ...;\nCREATE FUNCTION mytyperecv(internal, oid, integer) RETURNS mytype ...;\nALTER TYPE mytype SET (\n    SEND = mytypesend,\n    RECEIVE = mytyperecv\n);\n\u003c/pre\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e兼容性\u003c/h2\u003e\u003cp\u003e添加和删除属性的这些变体属于 SQL 标准；其他变体则是 PostgreSQL 扩展。\u003c/p\u003e\u003c/section\u003e\u003csection\u003e\u003ch2\u003e另见\u003c/h2\u003e\u003cspan\u003e\u003ca href=\"/wiki/sql/create-type/?v=18\" title=\"CREATE TYPE\" rel=\"nofollow\"\u003e\u003cspan\u003eCREATE TYPE\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/drop-type/?v=18\" title=\"DROP TYPE\" rel=\"nofollow\"\u003e\u003cspan\u003eDROP TYPE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e\u003c/section\u003e","SourceRevision":"1b5ca64c","ContentHash":"70f707dca94659a17472089ce1b755490b015d8820a8b9dccc9098cb0abc46d5","Payload":{"purpose_zh":"更改类型的定义","sections":[{"html":"\u003cp\u003e\u003ccode class=\"command\"\u003eALTER TYPE\u003c/code\u003e 更改现有类型的定义。它有以下几种子形式：\u003c/p\u003e\u003cdiv class=\"variablelist\"\u003e\u003cdl class=\"variablelist\"\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\"\u003eRENAME\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 SCHEMA\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\"\u003eRENAME ATTRIBUTE\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\"\u003eADD ATTRIBUTE\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这种形式向复合类型添加一个新属性，其语法与 \u003ca href=\"/docs/18/sql-createtype.html\" title=\"CREATE TYPE\"\u003e\u003ccode class=\"command\"\u003eCREATE TYPE\u003c/code\u003e\u003c/a\u003e 相同。\u003c/p\u003e\u003c/dd\u003e\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003ccode class=\"literal\"\u003eDROP ATTRIBUTE [ 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\"\u003eALTER ATTRIBUTE ... SET DATA TYPE\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\"\u003eADD VALUE [ IF NOT EXISTS ] [ BEFORE | AFTER ]\u003c/code\u003e\u003c/span\u003e\u003c/dt\u003e\u003cdd\u003e\u003cp\u003e这种形式向枚举类型中添加一个新值。可以用 \u003ccode class=\"literal\"\u003eBEFORE\u003c/code\u003e 或 \u003ccode class=\"literal\"\u003eAFTER\u003c/code\u003e 指定该新值在枚举排序中的位置，即位于某个现有值之前或之后。否则，新项会被添加到值列表的末尾。\u003c/p\u003e\u003cp\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\"\u003eRENAME VALUE\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 ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eproperty\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=\"command\"\u003eCREATE TYPE\u003c/code\u003e 中设置的一部分基础类型属性。具体可以更改的属性如下：\u003c/p\u003e\u003cdiv class=\"itemizedlist\"\u003e\u003cul class=\"itemizedlist\"\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e可以将\u003ccode class=\"literal\"\u003eRECEIVE\u003c/code\u003e设置为二进制输入函数的名称，或者设置为\u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e以移除该类型的二进制输入函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e可以将\u003ccode class=\"literal\"\u003eSEND\u003c/code\u003e设置为二进制输出函数的名称，或者设置为\u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e以移除该类型的二进制输出函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e可以将\u003ccode class=\"literal\"\u003eTYPMOD_IN\u003c/code\u003e设置为类型修饰符输入函数的名称，或者设置为\u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e以移除该类型的类型修饰符输入函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e可以将\u003ccode class=\"literal\"\u003eTYPMOD_OUT\u003c/code\u003e设置为类型修饰符输出函数的名称，或者设置为\u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e以移除该类型的类型修饰符输出函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e可以将\u003ccode class=\"literal\"\u003eANALYZE\u003c/code\u003e设置为类型专用的统计信息收集函数的名称，或者设置为\u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e以移除该类型的统计信息收集函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e可以将\u003ccode class=\"literal\"\u003eSUBSCRIPT\u003c/code\u003e设置为类型专用的下标处理函数的名称，或者设置为\u003ccode class=\"literal\"\u003eNONE\u003c/code\u003e以移除该类型的下标处理函数。使用此选项需要超级用户权限。\u003c/p\u003e\u003c/li\u003e\u003cli class=\"listitem\"\u003e\u003cp\u003e可以将\u003ccode class=\"literal\"\u003eSTORAGE\u003c/code\u003e设置为\u003ccode class=\"literal\"\u003eplain\u003c/code\u003e、\u003ccode class=\"literal\"\u003eextended\u003c/code\u003e、\u003ccode class=\"literal\"\u003eexternal\u003c/code\u003e或 \u003ccode class=\"literal\"\u003emain\u003c/code\u003e（关于这些设置含义的更多信息，见\u003ca href=\"/docs/18/storage-toast.html\" title=\"66.2. TOAST\"\u003e第 66.2 节\u003c/a\u003e）。但是，从\u003ccode class=\"literal\"\u003eplain\u003c/code\u003e改为其他设置需要超级用户权限（因为这要求该类型的 C 函数全部都能处理 TOAST），而从其他设置改为 \u003ccode class=\"literal\"\u003eplain\u003c/code\u003e则完全不允许（因为数据库中可能已经存在该类型经过 TOAST 处理的值）。请注意，更改该选项本身不会改变任何已存储的数据，它只是为将来创建的表列设置默认的 TOAST 策略。要更改现有表列的 TOAST 策略，请参见\u003ca href=\"/docs/18/sql-altertable.html\" title=\"ALTER TABLE\"\u003e\u003cspan class=\"refentrytitle\"\u003eALTER TABLE\u003c/span\u003e\u003c/a\u003e。\u003c/p\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003cp\u003e关于这些类型属性的更多细节，请参见\u003ca href=\"/docs/18/sql-createtype.html\" title=\"CREATE TYPE\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE TYPE\u003c/span\u003e\u003c/a\u003e。请注意，在适当情况下，对基础类型这些属性的更改会自动传播到基于该类型的域。\u003c/p\u003e\u003c/dd\u003e\u003c/dl\u003e\u003c/div\u003e\u003cp\u003e\u003ccode class=\"literal\"\u003eADD ATTRIBUTE\u003c/code\u003e、\u003ccode class=\"literal\"\u003eDROP ATTRIBUTE\u003c/code\u003e 和 \u003ccode class=\"literal\"\u003eALTER ATTRIBUTE\u003c/code\u003e 操作可以组合成一个包含多项修改的列表，以便并行应用。例如，可以在一条命令中添加多个属性和/或更改多个属性的数据类型。\u003c/p\u003e\u003cp\u003e要使用 \u003ccode class=\"command\"\u003eALTER TYPE\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要修改的现有类型的名称（可以是模式限定的）。\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\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\u003cdt\u003e\u003cspan class=\"term\"\u003e\u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_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_attribute_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\u003enew_enum_value\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\u003eneighbor_enum_value\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\u003eexisting_enum_value\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\u003eproperty\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自动将该操作传播到正在修改的类型的类型化表及其后代。\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\u003c/dl\u003e\u003c/div\u003e","key":"parameters","title":"参数"},{"html":"\u003cp\u003e如果在事务块中执行 \u003ccode class=\"command\"\u003eALTER TYPE ... ADD VALUE\u003c/code\u003e（即向枚举类型添加新值的形式），则在事务提交之后才能使用该新值。\u003c/p\u003e\u003cp\u003e涉及新增枚举值的比较有时会比仅涉及该枚举类型原有成员的比较更慢。这通常只会在使用 \u003ccode class=\"literal\"\u003eBEFORE\u003c/code\u003e 或 \u003ccode class=\"literal\"\u003eAFTER\u003c/code\u003e 将新值的排序位置设在列表末尾之外时发生。不过，即使新值被添加到末尾，有时也会出现这种情况（如果自最初创建该枚举类型以来 OID 计数器已经\u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003e回卷\u003c/span\u003e”\u003c/span\u003e，就会发生这种情况）。这种变慢通常无关紧要；但如果它确实重要，可以通过删除并重新创建该枚举类型，或者转储并恢复数据库，来恢复最佳性能。\u003c/p\u003e","key":"notes","title":"注解"},{"html":"\u003cp\u003e要重命名一个数据类型：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE electronic_mail RENAME TO email;\n\u003c/pre\u003e\u003cp\u003e要将类型\u003ccode class=\"literal\"\u003eemail\u003c/code\u003e的拥有者改为 \u003ccode class=\"literal\"\u003ejoe\u003c/code\u003e：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE email OWNER TO joe;\n\u003c/pre\u003e\u003cp\u003e要将类型\u003ccode class=\"literal\"\u003eemail\u003c/code\u003e所在的模式改为 \u003ccode class=\"literal\"\u003ecustomers\u003c/code\u003e：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE email SET SCHEMA customers;\n\u003c/pre\u003e\u003cp\u003e要向一个复合类型添加一个新属性：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE compfoo ADD ATTRIBUTE f3 int;\n\u003c/pre\u003e\u003cp\u003e要在枚举类型的特定排序位置添加一个新值：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE colors ADD VALUE 'orange' AFTER 'red';\n\u003c/pre\u003e\u003cp\u003e要重命名一个枚举值：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eALTER TYPE colors RENAME VALUE 'purple' TO 'mauve';\n\u003c/pre\u003e\u003cp\u003e要为现有基础类型创建二进制 I/O 函数：\u003c/p\u003e\u003cpre class=\"programlisting\"\u003eCREATE FUNCTION mytypesend(mytype) RETURNS bytea ...;\nCREATE FUNCTION mytyperecv(internal, oid, integer) RETURNS mytype ...;\nALTER TYPE mytype SET (\n    SEND = mytypesend,\n    RECEIVE = mytyperecv\n);\n\u003c/pre\u003e","key":"examples","title":"示例"},{"html":"\u003cp\u003e添加和删除属性的这些变体属于 SQL 标准；其他变体则是 PostgreSQL 扩展。\u003c/p\u003e","key":"compatibility","title":"兼容性"},{"html":"\u003cspan class=\"simplelist\"\u003e\u003ca href=\"/wiki/sql/create-type/?v=18\" title=\"CREATE TYPE\"\u003e\u003cspan class=\"refentrytitle\"\u003eCREATE TYPE\u003c/span\u003e\u003c/a\u003e, \u003ca href=\"/wiki/sql/drop-type/?v=18\" title=\"DROP TYPE\"\u003e\u003cspan class=\"refentrytitle\"\u003eDROP TYPE\u003c/span\u003e\u003c/a\u003e\u003c/span\u003e","key":"see_also","title":"另见"}],"sections_same_as":"","synopsis_html":"ALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e OWNER TO { \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_owner\u003c/code\u003e\u003c/em\u003e | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e RENAME TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_name\u003c/code\u003e\u003c/em\u003e\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e SET SCHEMA \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_schema\u003c/code\u003e\u003c/em\u003e\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e RENAME ATTRIBUTE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_name\u003c/code\u003e\u003c/em\u003e TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_attribute_name\u003c/code\u003e\u003c/em\u003e [ CASCADE | RESTRICT ]\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e \u003cem class=\"replaceable\"\u003e\u003ccode\u003eaction\u003c/code\u003e\u003c/em\u003e [, ... ]\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e ADD VALUE [ IF NOT EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_enum_value\u003c/code\u003e\u003c/em\u003e [ { BEFORE | AFTER } \u003cem class=\"replaceable\"\u003e\u003ccode\u003eneighbor_enum_value\u003c/code\u003e\u003c/em\u003e ]\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e RENAME VALUE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eexisting_enum_value\u003c/code\u003e\u003c/em\u003e TO \u003cem class=\"replaceable\"\u003e\u003ccode\u003enew_enum_value\u003c/code\u003e\u003c/em\u003e\nALTER TYPE \u003cem class=\"replaceable\"\u003e\u003ccode\u003ename\u003c/code\u003e\u003c/em\u003e SET ( \u003cem class=\"replaceable\"\u003e\u003ccode\u003eproperty\u003c/code\u003e\u003c/em\u003e = \u003cem class=\"replaceable\"\u003e\u003ccode\u003evalue\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 ATTRIBUTE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_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 ] [ CASCADE | RESTRICT ]\n    DROP ATTRIBUTE [ IF EXISTS ] \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_name\u003c/code\u003e\u003c/em\u003e [ CASCADE | RESTRICT ]\n    ALTER ATTRIBUTE \u003cem class=\"replaceable\"\u003e\u003ccode\u003eattribute_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 ] [ CASCADE | RESTRICT ]","synopsis_text":"ALTER TYPE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }\nALTER TYPE name RENAME TO new_name\nALTER TYPE name SET SCHEMA new_schema\nALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]\nALTER TYPE name action [, ... ]\nALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]\nALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value\nALTER TYPE name SET ( property = value [, ... ] )\n\n其中 action 可以是以下之一：\n\nADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]\nDROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ]\nALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ]"}},"RequestedLocale":"zh-Hans","Fallback":false,"Versions":["10","11","12","13","14","15","16","17","18","19","20","8.0","8.1","8.2","8.3","8.4","9.0","9.1","9.2","9.3","9.4","9.5","9.6"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
