PostgreSQL常用表操作SQL脚本整理

news/2024/9/20 9:48:32/ 标签: postgresql

标题

  • 查看 PostgreSQL表字段信息包括 名称,数据类型,精度,注释等信息
    • 查看数据库中的 schemas
    • 查看特定 schema 中的所有表
    • 查看指定表所有列的信息:
    • 查看主键信息:
    • 查看索引信息:
  • 创建库表模板
  • 修改表信息
  • 修改表字段信息
    • 新增字段
    • 修改字段
    • 新增、删除索引
    • 设置主键约束、去掉主键和非空约束
    • 删除字段

注意:这是连接工具(navicat)下的操作脚本,关于Linux下的暂不整理

查看 PostgreSQL表字段信息包括 名称,数据类型,精度,注释等信息

	
-- 使用sql语句查看 PostgreSQL表字段信息包括 名称,数据类型,精度,注释等信息 SELECT
-- 	 cols.table_catalog, --数据库的名称。
-- 	 cols.table_schema, --表所属的 schema 名称。  
--   cols.table_name, --表的名称。 cols.ordinal_position, -- 列在表中的顺序(从 1 开始)。cols.column_name,cols.data_type, --列的数据类型。cols.character_maximum_length, -- 对于字符类型的列,这是最大长度(以字符为单位)。
--   cols.character_octet_length, -- 对于字符类型的列,这是最大长度(以字节为单位)。cols.numeric_precision, --对于数值类型的列,这是精度(即数字的总位数)。cols.numeric_precision_radix, --对于数值类型的列,这是基数(通常是 2 或 10)。
--   cols.datetime_precision, --对于日期和时间类型的列,这是精度(即秒的小数位数)。cols.numeric_scale, --对于数值类型的列,这是标度(即小数点后的位数)。
--   cols.interval_type, -- 对于间隔类型的列,这是间隔的类型(如 YEAR、MONTH、DAY 等)。cols.column_default, --列的默认值,如果有的话。cols.is_nullable, --是否允许 NULL 值。YES 表示允许,NO 表示不允许。col_description((cols.table_schema || '.' || cols.table_name)::regclass, cols.ordinal_position::int) AS comment
FROMinformation_schema.columns cols
WHEREcols.table_schema = 'public'AND cols.table_name = 'bc_deposit_conversion_records';-- 其他不常用相关值含义	
-- interval_precision,对于间隔类型的列,这是间隔的精度。
-- character_set_catalog,对于字符集敏感的列,这是字符集的目录名称。
-- character_set_schema,对于字符集敏感的列,这是字符集的 schema 名称。
-- character_set_name,对于字符集敏感的列,这是字符集的名称。
-- collation_catalog,对于具有校对规则的列,这是校对规则的目录名称。
-- collation_schema,对于具有校对规则的列,这是校对规则的 schema 名称。
-- collation_name,对于具有校对规则的列,这是校对规则的名称。
-- domain_catalog,对于域的列,这是域的目录名称。
-- domain_schema,对于域的列,这是域的 schema 名称。
-- domain_name,对于域的列,这是域的名称。	

查看数据库中的 schemas

-- 你可以使用 SQL 命令来查看数据库中的 schemas,例如:
SELECT schema_name FROM information_schema.schemata;

查看特定 schema 中的所有表

-- 要查看特定 schema 中的所有表,你可以使用如下命令:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

查看指定表所有列的信息:

-- 查看指定表所有列的信息:
SELECT  
*
--   COLUMN_NAME,
-- 	ordinal_position,
-- 	data_type,
-- 	udt_name ,
-- 	is_nullable,
-- 	column_default
FROM information_schema.COLUMNS 
WHERE table_schema = 'public' -- 替换为你的schema名称
AND TABLE_NAME = 'bc_deposit_conversion_records';-- 替换为你的表名称-- 查看表的字段对应注释信息:
SELECT
attname,  col_description(attrelid, attnum)
FROM  pg_attribute
WHEREattrelid = 'public.bc_deposit_conversion_records'::regclassAND attnum > 0AND NOT attisdropped;

查看主键信息:


-- 查看主键信息:
SELECT kc.column_name, tc.table_name, kc.constraint_name
FROM information_schema.table_constraints tc
JOIN information_schema.key_column_usage kcON tc.constraint_name = kc.constraint_nameAND tc.table_schema = kc.table_schema
WHERE tc.constraint_type = 'PRIMARY KEY'AND tc.table_name = 'bc_deposit_conversion_records'AND tc.table_schema = 'public';

查看索引信息:

-- 查看索引信息:
SELECTi.relname AS index_name,idx.indisunique AS is_unique,idx.indisprimary AS is_primary,idx.indkey,pg_get_indexdef(idx.indexrelid) AS definition
FROMpg_class t,pg_class i,pg_index idx
WHEREt.oid = idx.indrelidAND i.oid = idx.indexrelidAND t.relkind = 'r'AND t.relname = 'bc_deposit_conversion_records'AND t.relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'public');

创建库表模板

DROP TABLE IF EXISTS  bc_common_new;CREATE TABLE bc_common (-- id SERIAL PRIMARY KEY, -- 自增的整数 IDid BIGSERIAL PRIMARY KEY,user_name VARCHAR(10) NOT NULL,amount numeric(20,4),age INTEGER,sex CHAR(1) ,birthday DATE,content_detil TEXT,del_flag INTEGER DEFAULT 0,create_date DATE,modify_date DATE,datetime_field TIMESTAMP WITHOUT TIME ZONE ,-- 日期时间create_by VARCHAR(10) ,modify_by VARCHAR(10) 
);-- 添加注释
COMMENT ON TABLE bc_common IS '建表模板信息表111'; -- 修改表注释COMMENT ON COLUMN bc_common.id IS '自增主键';
COMMENT ON COLUMN bc_common.user_name IS '用户姓名';
COMMENT ON COLUMN bc_common.amount IS '用户金额';
COMMENT ON COLUMN bc_common.age IS '用户年龄';
COMMENT ON COLUMN bc_common.sex IS '用户性别0男1女3未知';
COMMENT ON COLUMN bc_common.birthday IS '出生日期';
COMMENT ON COLUMN bc_common.content_detil IS '语句模板明细';
COMMENT ON COLUMN bc_common.del_flag IS '逻辑删除标志,默认0有效,1为无效';
COMMENT ON COLUMN bc_common.create_date IS '创建时间';
COMMENT ON COLUMN bc_common.modify_date IS '修改时间';
COMMENT ON COLUMN bc_common.datetime_field IS '包含日期时间';
COMMENT ON COLUMN bc_common.create_by IS '创建人';
COMMENT ON COLUMN bc_common.modify_by IS '修改人';

修改表信息

修改表注释

COMMENT ON TABLE bc_common IS '建表模板信息表111'; 

修改表名称

ALTER TABLE old_table_name RENAME TO new_table_name;

修改表字段信息

在执行这些操作之前,请确保你有足够的权限来修改表结构,并且建议在生产环境中先在测试数据库上进行测试。如果你的表中已经包含数据,添加新字段可能会影响表的性能,尤其是对于大型表。

新增字段

在 PostgreSQL 中,添加新字段到现有表通常不涉及指定特定位置,因为 SQL 标准并不保证字段的物理顺序。字段在表中的顺序通常只影响 SELECT 语句中字段的默认顺序,而不会影响数据的存储或检索。

ALTER TABLE bc_common
ADD COLUMN add_new_column CHAR(10);
-- 加上新增字段的注释信息
COMMENT ON COLUMN bc_common.add_new_column IS '新增字段注释';--连续新增n个字段,你可以通过逗号分隔每个 ADD COLUMN 子句来添加多个字段。
ALTER TABLE bc_common
ADD COLUMN new_column1 CHAR(1),
ADD COLUMN new_column2 VARCHAR(10),
ADD COLUMN new_column3 DATE;-- 如果你想为新添加的字段设置默认值,可以使用 DEFAULT 关键字:
ALTER TABLE employees
ADD COLUMN email VARCHAR(255) DEFAULT 'default@email.com';
-- 如果你想让新添加的字段能够存储 NULL 值,可以省略 NOT NULL 约束(这是默认行为)。
--如果你希望字段不允许 NULL 值,可以添加 NOT NULL 约束:
ALTER TABLE employees
ADD COLUMN email VARCHAR(255) NOT NULL;

修改字段

修改字段名

ALTER TABLE bc_common
RENAME COLUMN old_column_name TO new_column_name;

修改字段类型
这块需要区分修改的类型情况
①原类型上的修改如 VARCHAR(10)===》VARCHAR(50)
②原类型修改为另一种类型如 VARCHAR(50)===》numeric(8,4)

# 针对情况①
ALTER TABLE bc_common
ALTER COLUMN add_new_column TYPE numeric(18,4);# 针对①、②都适用
ALTER TABLE bc_common
ALTER COLUMN add_new_column TYPE numeric(8,4) USING add_new_column::numeric(8,4);

修改字段注释
COMMENT ON COLUMN bc_common.add_new_column IS '修改字段注释';

新增、修改、删除默认值

-- 新增或修改默认值
ALTER TABLE bc_common
ALTER COLUMN add_new_column_newName SET DEFAULT '0.5';-- 删除默认值
ALTER TABLE bc_common
ALTER COLUMN add_new_column_newName DROP DEFAULT;

新增、删除索引

-- CREATE INDEX index_name ON your_table_name (column_name); 
-- 这将创建一个标准的 B-tree 索引,适用于大多数基于等值和范围的查询。
CREATE INDEX index_name2 ON bc_common (new_column2);-- 如果你需要创建特定类型的索引,比如 GIN(Generalized Inverted Index)
-- 或 GiST(Generalized Search Tree)索引,你需要在 USING 子句中指定索引类型。例如,创建一个 GIN 索引:
CREATE INDEX index_name ON your_table_name USING gin (column_name);-- 要删除索引,你可以使用 DROP INDEX 语句。例如,如果你想删除名为 index_name2 的索引
DROP INDEX index_name2;
-- 删除索引时,使用 IF EXISTS 可以避免因索引不存在而导致的错误。
DROP INDEX  IF EXISTS index_name2;-- 如果你想在删除索引时避免锁定表,可以使用 CONCURRENTLY 选项,这将异步删除索引,
-- 但有一些限制,比如不能与 CASCADE 选项一起使用,并且一次只能删除一个索引:
DROP INDEX CONCURRENTLY index_name2;

例如 现在你想添加一个唯一索引

-- CREATE UNIQUE INDEX index_name ON table_name (name);CREATE UNIQUE INDEX index_name1 ON bc_common (new_column1);
-- 如果表中已经存在重复的 new_column1值,创建唯一索引时会失败,并返回错误。
-- 唯一索引会阻止你插入或更新任何会导致 name 字段出现重复值的记录。
-- 唯一索引可以和普通索引一样,使用 DROP INDEX 命令删除。

设置主键约束、去掉主键和非空约束


-- alter table [tbl_name] add constraint pkey_name primary key(id);
ALTER TABLE bc_common ADD CONSTRAINT bc_common_pkey666 PRIMARY KEY (id);-- alter table [tbl_name] drop constraint pkey_name;
ALTER TABLE bc_common DROP CONSTRAINT bc_common_pkey666;-- alter table [tbl_name] alter [col_name] drop not null;
ALTER TABLE bc_common ALTER COLUMN user_name DROP NOT NULL;

删除字段

ALTER TABLE bc_common DROP COLUMN new_column3;

http://www.ppmy.cn/news/1527951.html

相关文章

Vue.js 的 Mixins

Vue.js 的 Mixins 是一种非常强大且灵活的功能,它允许你封装可复用的 Vue 组件选项。Mixins 实际上是一种分发 Vue 组件可复用功能的非常灵活的方式。一个 mixin 对象可以包含任意组件选项。当组件使用 mixin 时,所有 mixin 选项将被“混入”该组件本身的…

切换淘宝最新镜像源npm

要切换淘宝的最新镜像源 npm,可以按照以下步骤进行操作: 安装 Node.js 和 npm: 确保你的系统中已经安装了 Node.js 和 npm。可以通过以下命令检查: node -v npm -v切换 npm 源: 使用以下命令将 npm 的源切换到淘宝镜像…

VUE工程中axios基本使用

安装axios npm install axios -s在main.js中引入 import http from axios Vue.prototype.$http = http将其绑定在VUE的prototype属性中 vue工程目录下,新建config文件夹,在config文件夹下新建index.js export default {

【Linux进程控制】进程程序替换

目录 进程程序替换 替换函数 看现象 替换原理 多进程替换 exec*函数使用(部分),并且认识函数参数的含义 1.execl 2.execv 3.execvp 4.execvpe execlp 和execlpe 替换函数总结 进程程序替换 替换函数 有六种以exec开头的函数&am…

高德地图JS API加载行政区边界AMap.Polygon

🤖 作者简介:水煮白菜王 ,一位资深前端劝退师 👻 👀 文章专栏: 高德AMap专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧✍。 感谢支持💕💕&#x1f49…

PDP 和 ICE 图的终极指南

部分依赖图和单独条件期望图背后的直觉、数学和代码(R 和 Python) PDP 和 ICE 图都可以帮助我们了解我们的模型如何做出预测。 使用个人显示面板我们可以将模型特征和目标变量之间的关系可视化。它们可以告诉我们某种关系是线性的、非线性的还是没有关系。 同样,当特征之间…

Java 入门指南:JVM(Java虚拟机)—— Java 类加载器详解

类加载器 类加载器(Class Loader)是 Java 虚拟机(JVM)的一部分,它的作用是将类的字节码文件(.class 文件)从磁盘或其他来源加载到 JVM 中。类加载器负责查找和加载类的字节码文件,并…

通过防火墙分段增强网络安全

什么是网络分段‌ 随着组织规模的扩大,管理一个不断扩大的网络成为一件棘手的事情,同时确保安全性、合规性、性能和不间断的运行可能是一项艰巨的任务。为了克服这一挑战,网络管理员部署了网络分段,这是一种将网络划分为更小且易…

openssl-AES-128-CTR加解密char型数组分析

本文章通过对一个unsigned char*类型的数据做简单的加解密操作来学习如何使用openssl库函数。 openssl为3.0.0&#xff0c;对此前版本的很多函数都不兼容。 加解密源码 #include <openssl/evp.h> #include <openssl/err.h> #include <string.h> #include …

职场人生-外企福利待遇

今天来给大家分享一下外企的待遇&#xff0c;虽然外服享受不到这些待遇&#xff0c;但是也可以跟大家分享分享 1.四季福利.外企一般在春夏秋冬都会发印有公司logo的衣服&#xff0c;春天的外套&#xff0c;夏天的短袖&#xff0c;秋天的长袖&#xff0c;冬天的棉袄&#xff0c…

【HTML】入门教程

HTML入门 HTML网页主流浏览器及其内核W3C标准HTML结构简单示例meta HTML标签语法规则标签分类标签之间的关系标签属性通用属性&#xff1a; 常用标签及其属性应用示例 HTML5语义化标签多媒体标签视频标签 video音频标签 audio 新增的表单元素 参考文档 HTML HTML 指的是超文本…

使用llama.cpp 在推理MiniCPM-1.2B模型

llama.cpp 是一个开源项目&#xff0c;它允许用户在C中实现与LLaMA&#xff08;Large Language Model Meta AI&#xff09;模型的交互。LLaMA模型是由Meta Platforms开发的一种大型语言模型&#xff0c;虽然llama.cpp本身并不包含LLaMA模型的训练代码或模型权重&#xff0c;但它…

GPU 云与 GenAI :DigitalOcean 在 AI 平台与应用方向的技术规划

在 DigitalOcean&#xff0c;我们不仅在观察人工智能革命&#xff0c;而且还在积极参与这场技术革命。 去年&#xff0c;我们进行了一项关键的收购以扩展平台的人工智能能力&#xff0c;扩大了对曾经仅限于大型企业的 AI/ML 开发工具的访问。在2024年7月由 DigitalOcean 主办的…

道路裂缝,坑洼,病害数据集-包括无人机视角,摩托车视角,车辆视角覆盖道路

道路裂缝&#xff0c;坑洼&#xff0c;病害数据集 包括无人机视角&#xff0c;摩托车视角&#xff0c;车辆视角 覆盖道路所有问题 一共有八类16000张 1到7依次为: [横向裂缝, 纵向裂缝, 块状裂缝, 龟裂, 坑槽, 修补网状裂缝, 修补裂缝, 修补坑槽] 道路病害&#xff08;如裂缝、…

问:说说notify()和notifyAll()有什么区别?

notify() 和 notifyAll() 是 Java 中用于线程间通信的方法&#xff0c;这两个方法都用于唤醒正在等待 (wait()) 的线程。然而&#xff0c;它们在工作方式和应用场景上有一些重要的区别。 notify() vs notifyAll() notify(): 唤醒一个正在等待 (wait()) 的线程。如果有多个线程…

演示:基于WPF自绘的中国省份、城市、区县矢量地图

一、目的&#xff1a;演示一个基于WPF自绘的中国省份、城市、区县矢量地图 二、效果 国 省 市 三、功能 支持实际经纬度显示 支持平移&#xff0c;缩放等功能 显示中国地图 显示各个省份地图 显示各个省份地图&#xff08;包含在表格中&#xff0c;包含缩率图&#xff09; 显…

基于单片机的远程无线控制系统设计

摘 要 &#xff1a; 主要介绍了一种以单片机 AT89C2051 、 无线模块 APC200A-43 和继电器为核心的远程智能控制系统。 该系统通过对单片机功能的研究 &#xff0c; 使用单片机的输入输出口和中断实现对控制信号的处理&#xff0c; 通过调试无线通讯模块 &#xff0c; 控制…

桥接网络设置多用户lxd容器

文章目录 前言配置宿主机网络固定内核版本安装 lxd、zfs 及 bridge-utils安装宿主机显卡驱动lxd 初始化创建容器模板安装容器显卡驱动复制容器 前言 使用桥接网络配置 lxd 有个好处&#xff0c;就是每个用户都可以在该局域网下有一个自己独立的 IP&#xff0c;该 IP 的端口可以…

玩转RabbitMQ声明队列交换机、消息转换器

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

【自动驾驶】控制算法(九)深度解析车辆纵向控制 | 从算法基础到 Carsim 仿真实践

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…