修改表
如果你创建了一个表后发现自己犯了一个错误,或者是应用的需求发生了变化,那么你可以删除这个表然后重新创建它。但是如果这个表已经填充了好多数据了,或者是该表已经被其它数据库对象引用,(比如一个外键约束)那这可不是一个方便的选项。因此 PostgreSQL提供了一族命令用于修改现有表。请注意它在概念上和修改一个表中包含的数据是不一样的:这里我们感兴趣的是修改一个表的定义,或者说结构。
你可以
-
增加字段,
-
删除字段,
-
增加约束,
-
删除约束,
-
修改缺省值,
-
修改字段数据类型,
-
重命名字段,
-
重命名表。
所有这些动作都是用 ALTER TABLE 命令执行的。
1. 增加字段
要增加一个字段,使用下面这样的命令:
ALTER TABLE products ADD COLUMN description text;
新增的字段对于表中已经存在的行而言最初将先填充所给出的缺省值(如果你没有声明DEFAULT子句,那么缺省是空值)。
你也可以同时在该字段上定义约束,使用通常的语法:
ALTER TABLE products ADD COLUMN description text CHECK (description <> '');
实际上,所有在 CREATE TABLE 里描述的可以应用于字段之选项都可以在这里使用。不过,我们要注意的是缺省值必须满足给出的约束,否则 ADD 将会失败。另外,你可以在你正确填充了新字段的数值之后再增加约束(见下文)。
2. 删除字段
要删除一个字段,使用下面这样的命令:
ALTER TABLE products DROP COLUMN description;
不管字段里有啥数据,都会小时。和这个字段相关的约束也会被删除。 不过,如果这个字段被另外一个表的外键所引用,PostgreSQL 则不会隐含地删除该约束。你可以通过使用 CASCADE 来授权删除任何依赖该字段的东西:
ALTER TABLE products DROP COLUMN description CASCADE;
参阅 Section 5.11 获取有关这些操作背后的机制的信息。
5.5.3. 增加约束
要增加一个约束,使用表约束语法。比如:
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;
这个约束将立即进行检查,所以表在添加约束之前必须符合约束条件。
4. 删除约束
要删除一个约束,你需要知道它的名字。如果你给了它一个名字,那么事情就好办了。否则系统会分配一个生成的名字,这样你就需要把它找出来了。psql 的命令\d tablename 在这儿可以帮忙;其它接口可能也提供了检查表的细节的方法。然后就是这条命令:
ALTER TABLE products DROP CONSTRAINT some_name;
(如果你在处理一个生成的约束名,比如 $2,别忘了你需要给它 添加双引号,让它成为一个有效的标识符。)
和删除字段一样,如果你想删除有着被依赖关系地约束,你需要用 CASCADE。 一个例子是某个外键约束依赖被引用字段上的唯一约束或者主键约束。
除了非空约束外,所有约束类型都这么用。要删除非空类型,用
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
(要记得非空约束没有名字。)
5. 改变一个字段的缺省值
要给一个字段设置缺省值,使用一个象下面这样的命令:
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
请注意这么做不会影响任何表中现有的数据行, 它只是为将来 INSERT 命令改变缺省值。
要删除缺省值,用
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
这样实际上相当于把缺省设置为空。结果是,如果我们删除一个还没有定义的缺省值不算错误,因为缺省隐含就是空值。
6. 修改一个字段的数据类型
把一个字段转换成另外一种数据类型,使用下面的命令:
ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);
只有在字段里现有的每个项都可以用一个隐含的类型转换转换城新的类型时才可能成功。 如果需要更复杂的转换,你可以增加一个 USING 子句,它声明如何从旧值里计算新值。
PostgreSQL 将试图把字段的缺省值(如果存在)转换成新的类型, 还有涉及该字段的任何约束。但是这些转换可能失败,或者可能生成奇怪的结果。 在修改某字段类型之前,你最好删除那些约束,然后再把自己手工修改过的添加上去。
9. 给表改名字
给一个表重命名:
ALTER TABLE products RENAME TO items;
相关推荐
本项目就是针对这一需求,对Nacos 1.4.1的源码进行了修改,使其能够支持PostgreSQL。 首先,我们要理解Nacos与数据库交互的主要部分。Nacos的核心数据存储在持久化层,这部分主要包括服务注册信息、配置信息等。在...
在PostgreSQL中,表分区是一种优化数据库性能的技术,它允许将大表的数据分割成更小、更易管理的部分,每个部分称为一个分区。这有助于提高查询速度,减少维护成本,并优化存储空间。以下是对创建表分区的详细说明:...
3. **临时表空间**:PostgreSQL 10 支持为每个会话创建临时表空间,增强了对临时对象的管理,提高了并发性能。 4. **自动 Vacuum 优化**:自动 Vacuum 过程进行了改进,能更好地处理大量删除和更新操作,减少存储...
要将 Jeecgboot 集成到 PostgreSQL,需要更改数据源。首先,需要下载 PostgreSQL 的 JDBC 驱动程序,可以从 https://jdbc.postgresql.org/download.html 下载相应版本的驱动程序。然后,需要在 pom.xml 文件中添加...
4. 修改 data 目录的权限,在添加 postgre 用户,并具备全部权限 5. 重新启动 postgresql 服务 二、PostgreSQL 数据库崩溃原因分析 在实际应用中,PostgreSQL 数据库崩溃或无法启动的原因有很多,例如:系统故障、...
安装完成后,还需要对PostgreSQL进行一些基本的配置,例如修改`postgresql.conf`和`pg_hba.conf`文件来调整性能参数、设置访问控制等。此外,还可以通过`psql`命令行工具登录数据库进行进一步的管理和操作。 ##### ...
由于其灵活的许可证条款,任何人都可以免费地使用、修改和分发PostgreSQL。 #### 二、离线安装步骤 本教程将详细介绍如何在没有网络连接的情况下安装PostgreSQL及其相关组件。 ##### 2.1 下载安装包和依赖包 ...
作为一款开源软件,PostgreSQL的源代码对公众开放,允许用户自由地使用、修改和分发,这使得它在全球范围内拥有活跃的社区和丰富的资源。 描述中提到“非常实用的数据库开发工具”,意味着PostgreSQL不仅适用于企业...
PostgreSQL 数据表操作是指使用 SQL 语言或 pgAdmin 工具来操作数据表对象,包括创建数据表、修改数据表、删除数据表等。 PostgreSQL 数据类型介绍 PostgreSQL 数据类型包括数值类型、日期与时间类型、字符串类型...
9. **重启服务**:完成配置更改后,重启PostgreSQL服务使更改生效: ``` sudo systemctl restart postgresql-12 ``` 10. **测试连接**:最后,可以使用新创建的用户和数据库尝试本地或远程连接,以确认安装成功...
而在PostgreSQL中,数据缓冲区管理则依赖于`Shared_buffers`,默认配置下,系统分配64个缓冲区,块大小为8K,通过修改`postgresql.conf`文件中的`shared_buffers`参数可调整缓存大小。 #### 四、数据库连接与用户...
- 修改`postgresql.conf`文件,配置如下参数: - `listen_addresses = '*'`:开启所有IP监听 - `port = 5432`:设置端口号 - `max_connections = 1000`:设置最大连接数 - `wal_level = archive`:设置为归档...
从这里可以看出PostgreSQL表...通过作用于主表的触发器,把主表的修改重定向到适当的分区表等工作,分区的创建和管理都需要我们用语言来控制,增加了开发人员的工作量,PostgreSQL表分区的所有表结构和表分区及触发器
从其他数据库迁移的数据库代码通常需要大量手工修改工作,因为存储过程可能包含带有开始、提交和回滚的事务块。存储过程调用语法为 CALL name ( [ argument ] [, ...] )。 并行创建索引和HASH JOIN PostgreSQL 11 ...
例如,可以使用以下语句来查询数据库表的内容:curs = exec(connection, ['SELECT * FROM "database_table";']);然后,可以使用 fetch 函数来获取查询结果:row = fetch(curs, 1); 知识点:Matlab 的数据库应用 ...
postgresql-9.1 PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型...免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。
本程序的重点是如何利用C#对PostgreSQL数据库进行操作,PDatabase.cs是一个完整的操作类,role是角色表的操作类,程序采用三层架构模型。 在对PostgreSQL数据库进行操作时,用到了如何调用存储过程来完成各项操作。...
掌握计算机组成原理有助于理解数据库如何与硬件交互,C语言是PostgreSQL的主要实现语言,对它的理解可以帮助阅读和修改源代码。操作系统原理揭示了数据库如何在系统层面上运行,而数据库原理则是理解其核心功能的...