首页 > 数据库 >PostgreSQL-更改表

PostgreSQL-更改表

时间:2022-09-03 10:01:20浏览次数:72  
标签:PostgreSQL 删除 更改 COLUMN 约束 products TABLE ALTER

当您创建一个表并意识到您犯了一个错误,或者应用程序的需求发生变化时,您可以删除该表并重新创建它。但是,如果表已经被数据填充,或者表被其他数据库对象引用(例如外键约束),这不是一个方便的选择。因此 PostgreSQL 提供了一系列命令来修改现有的表。请注意,这在概念上与更改表中包含的数据不同:这里我们感兴趣的是更改表的定义或结构。

一、新增一列
要添加列,请使用如下命令:

ALTER TABLE products ADD COLUMN description text;

新列最初填充了给定的任何默认值(如果未指定 DEFAULT 子句,则为 null)。

您还可以使用通常的语法同时在列上定义约束:

ALTER TABLE products ADD COLUMN description text CHECK (description <> '');

二、删除列
要删除列,请使用如下命令:

ALTER TABLE products DROP COLUMN description;

列中的任何数据都会消失。涉及列的表约束也被删除。但是,如果该列被另一个表的外键约束引用,PostgreSQL 不会默默地删除该约束。您可以通过添加 CASCADE 来授权删除依赖于该列的所有内容:

ALTER TABLE products DROP COLUMN description CASCADE;

三、添加约束
要添加约束,请使用表约束语法。例如:

ALTER TABLE products ADD CHECK (name <> '');
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;

要添加非空约束,请使用以下语法:

ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;

约束会被立即检查,所以表数据必须满足约束才能添加。

四、移除约束
要删除约束,您需要知道它的名称。如果你给它一个名字,那很容易。否则系统会分配一个生成的名称,您需要找出它。psql 命令 \d tablename 在这里会有所帮助;其他接口也可能提供一种检查表详细信息的方法。然后命令是:

ALTER TABLE products DROP CONSTRAINT some_name;

与删除列一样,如果要删除其他依赖项的约束,则需要添加 CASCADE。例如,外键约束依赖于引用列上的唯一键或主键约束。

要删除非空约束,请使用:

ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;

非空约束没有名称。

五、设置默认值
要为列设置新的默认值,请使用如下命令:

ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;

请注意,这不会影响表中的任何现有行,它只会更改未来 INSERT 命令的默认值。

要删除任何默认值,请使用:

ALTER TABLE products ALTER COLUMN price DROP DEFAULT;

六、改变列数据类型
要将列转换为不同的数据类型,请使用如下命令:

ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);

只有当列中的每个现有条目都可以通过隐式强制转换转换为新类型时,这才会成功。如果需要更复杂的转换,您可以添加一个 USING 子句,指定如何从旧值计算新值。
PostgreSQL 将尝试将列的默认值(如果有)转换为新类型,以及涉及该列的任何约束。但是这些转换可能会失败,或者可能会产生令人惊讶的结果。通常最好在更改其类型之前删除列上的任何约束,然后再添加适当修改的约束。

七、重命名列名
要重命名列:

ALTER TABLE products RENAME COLUMN product_no TO product_number;

八、重命名表名
要重命名表:

ALTER TABLE products RENAME TO items;

标签:PostgreSQL,删除,更改,COLUMN,约束,products,TABLE,ALTER
From: https://www.cnblogs.com/shigongp/p/16652033.html

相关文章

  • PostgreSQL-系统列
    每个表都有几个由系统隐式定义的系统列。因此,这些名称不能用作用户定义列的名称。(请注意,这些限制与名称是否是关键字是分开的;引用名称不会让您逃避这些限制。)您实际上不需......
  • PostgreSQL-基础2
    一、类型转换的方式CAST(expressionAStype)expression::typetypename(expression)二、生成列生成的列是始终从其他列计算的特殊列。因此,对于列,视图对于表是......
  • ubuntu 您不是所有者所以您不能更改
    ubuntu12.04 您不是所有者所以您不能更改删除文件夹sudorm-rxxx(文件路径一定不要出错)该权限sudochmod777xxx (权限是在文件的前面不是后面)其实我告诉你......
  • Android Studio更改SDK、Gradle以及模拟器默认下载位置
    版本:AndroidStudioChipmunk|2021.2.1Patch2时间:2022年9月1日1、更改SDK位置找到File->Settings->Appearance&Behavior->SystemSettings->AndroidSDK......
  • 更改硬件串口映射
    ttyAMA0是硬件接串口,ttyS0是软件串口输入sudoraspi-config打开串口,关闭串口登录,后重启raspberry.查看串口映射关系ls-l/dev如serial0->ttyS0serial1->ttyA......
  • PostgreSql 数据库导出
    运行位置在安装目录的的bean文件夹下(有一个pg_dump文件)。命令pg_dump-h127.0.0.1-p5432-Upostgres-dxxx>C:\Users\admin\Desktop\临时文件\xxx.sql-h:ip地......
  • Windows 系统 PostgreSQL 手工安装配置方法
    自从2020年底开始接触PostgreSQL以来就喜欢上了这个数据库,个人感觉比MySQL好用,多表联合查询性能好很多,同时也不存在SQLServer的版权授权费用问题。搭配.NET开发很......
  • 更改数据库1521端口
    1、找到 product\11.2.0\dbhome_1\NETWORK\ADMIN下面的 listener.ora&tnsnames.ora两个文件,记得先备份 2、分别修改文件内的端口号listener.ora 如下图所示,要......
  • 使用 HTML 更改“Hello World”的边框
    使用HTML更改“HelloWorld”的边框编写一个helloworld程序意味着你已经开始学习这门语言了。helloworld程序的下一步应该是即兴创作。在本文中,我们将看到如何使......
  • PostgreSQL-标识符
    一、标识符标识符由字母或下划线()开头,标识符中的后续字符可以是字母、下划线、数字或美元符号。请注意,根据SQL标准的字母,标识符中不允许使用美元符号,因此使用它们可能会使......