如果要改变表的属性,你必须是表的所有者.
如果“[*]” 跟在一个表名后面,表示该命令要对该表和所有继承级别低于该表(该表父表)的表进行操作.PostgreSQL U用户手册 里有关于继承的更多信息.
请参考 CREATE TABLE 部分获取更多合法参数的描述.
SQL92 对 ALTER TABLE 声明了一些附加的Postgres目前还不支持的功能 :
ALTER TABLE table ALTER [ COLUMN ] column SET DEFAULT defaultALTER TABLE table ALTER [ COLUMN ] column ADD [ CONSTRAINT constraint ] table-constraint 对表中指定列声明缺省值或约束. 请参考 CREATE TABLE 获取缺省值和约束语句的语法.如果已经有一个缺省值,它将被新值取代.如果原有约束存在,它们将和新约束用逻辑与(AND)共同使用.当前,要向现存的列设置新的缺省值或约束,此表必须重建和重新装载:
CREATE TABLE temp AS SELECT * FROM distributors;DROP TABLE distributors;CREATE TABLE distributors ( did DECIMAL(3) DEFAULT 1, name VARCHAR(40) NOT NULL, city VARCHAR(30));INSERT INTO distributors SELECT * FROM temp;DROP TABLE temp; (译注:这里的 temp 表也有前面同样问题.) ALTER TABLE table DROP DEFAULT defaultALTER TABLE table DROP CONSTRAINT constraint { RESTRICT | CASCADE } 上面两句将表中原有的缺省值或约束删除.如果声明了 RESTRICT ,那么只有无依赖性的约束可以被删除.如果声明了 CASCADE ,任何和依赖于此约束的约束都将被删除.当前,要将表中某列原有的缺省值或约束删除,表必须重建和重新装载:
CREATE TABLE temp AS SELECT * FROM distributors;DROP TABLE distributors;CREATE TABLE distributors AS SELECT * FROM temp;DROP TABLE temp; ALTER TABLE table DROP [ COLUMN ] column { RESTRICT | CASCADE } 上面语句将表中某列删除.如果声明了 RESTRICT,那么只有一个没有被别的列依赖的列可以被删除.如果声明了 CASCADE,那么所有依赖于该列的列都将被删除.当前,要删除一个现存的列,表必须重新创建和重新装载:
CREATE TABLE temp AS SELECT did, city FROM distributors; DROP TABLE distributors;CREATE TABLE distributors ( did DECIMAL(3) DEFAULT 1, name VARCHAR(40) NOT NULL,);INSERT INTO distributors SELECT * FROM temp;DROP TABLE temp;转载于:https://www.cnblogs.com/Fly-sky/archive/2010/11/08/1871749.html
