自学内容网 自学内容网

PostgreSQL在Linux环境下的常用命令总结

标题

须知:
以下所有命令我都在Linux环境中执行验证过,大家放心食用,其中的实际名称换成自己的实际名称即可。而且这块如果你不是运维人员的话,你只需要简单的会在Linux下查一下数据就行了。其他的操作都在客户端工具操作比较简单。了解一下即可

关于客户端的操作命令可以点我查看

在这里插入图片描述

登录PgSQL

基本连接方式
psql -U <用户名> -d <数据库名>:这是连接到指定数据库的常用命令。
例如,psql -U postgres -d mydb 表示以 postgres 用户身份连接到 mydb 数据库。
如果省略 -d 选项和数据库名,将连接到用户的默认数据库(postgres) 。

在这里插入图片描述

库表基本操作命令

  • 查看数据库版本:select version();

  • #查看有哪些用户:dg

  • 列出所有数据库:l

  • 切换数据库:c mydb

  • 列出当前数据库的所有表:dt

  • 列出表的结构:d 表名

  • 列出所有角色:du

  • 修改用户名密码:postgres=# alter user postgres with password 'postgres';

    – 创建新数据库
    CREATE DATABASE 数据库名;

    – 删除数据库
    DROP DATABASE 数据库名;

    – 创建新表
    CREATE TABLE 表名 (
    列1 数据类型,
    列2 数据类型,

    );

    – 删除表
    DROP TABLE 表名;

    – 插入数据
    INSERT INTO 表名 (列1, 列2, …) VALUES (值1, 值2, …);

    – 更新数据
    UPDATE 表名 SET 列1 = 值1, 列2 = 值2 WHERE 条件;

    – 删除数据
    DELETE FROM 表名 WHERE 条件;

    – 查询数据
    SELECT * FROM 表名;

    – 创建新用户
    CREATE USER 用户名 WITH PASSWORD ‘密码’;

    – 修改用户密码
    ALTER USER 用户名 WITH PASSWORD ‘新密码’;

    – 为用户授权
    GRANT 权限 TO 用户名;

    – 撤销权限
    REVOKE 权限 FROM 用户名;

新建库表

以下是在 PostgreSQL 中创建数据库 mydb 以及在其中创建 student 表和 teacher 表,并为每个表添加一些测试用字段的示例代码:

-- 创建数据库mydb
CREATE DATABASE mydb;

-- 连接到新创建的数据库mydb
c mydb

-- 创建student表
CREATE TABLE student (
    student_id SERIAL PRIMARY KEY,
    student_name VARCHAR(50),
    student_age INTEGER,
    student_gender CHAR(1),
    major VARCHAR(100)
);

-- 创建teacher表
CREATE TABLE teacher (
    teacher_id SERIAL PRIMARY KEY,
    teacher_name VARCHAR(50),
    teacher_age INTEGER,
    subject VARCHAR(100),
    department VARCHAR(100)
);



-- 向student表插入第一条数据
INSERT INTO student (student_name, student_age, student_gender, major)
VALUES ('张三', 20, 'M', '计算机科学与技术');

-- 向student表插入第二条数据
INSERT INTO student (student_name, student_age, student_gender, major)
VALUES ('李四', 22, 'F', '软件工程');

-- 向teacher表插入第一条数据
INSERT INTO teacher (teacher_name, teacher_age, subject, department)
VALUES ('王老师', 35, '数据库原理', '计算机系');

-- 向teacher表插入第二条数据
INSERT INTO teacher (teacher_name, teacher_age, subject, department)
VALUES ('李老师', 40, '操作系统', '计算机系');

在这里插入图片描述
在这里插入图片描述

修改库表

修改数据库名称:

一般来说没这种需求,不过测试玩玩的话还是整理一下吧

方法一

备份sql(见下面说明)
切换到别的数据库下删除:DROP DATABASE mydb;
CREATE DATABASE mybdtest;
执行备份SQL进行回复(见下面说明)

备份数据库(使用pg_dump)
在 Linux 下,备份mydb数据库可以使用pg_dump命令。假设你的 PostgreSQL 数据库用户名是postgres,密码是your_password(请替换为实际密码),主机地址是localhost,数据库名是mydb,你可以使用以下命令将数据库备份为一个.sql文件:
pg_dump -U postgres -h localhost -Fc mydb > mydb_backup.dump

命令解释:
-U postgres:指定以postgres用户身份进行备份操作。
-h localhost:指定数据库主机地址为本地(localhost),如果数据库在远程服务器,需要替换为实际的远程主机地址。
-Fc:指定输出格式为自定义(custom)二进制格式,这种格式在恢复数据时比较高效。如果想要纯文本格式的备份文件,可以使用-Fp(plain text),不过恢复时可能会稍微复杂一点。
mydb:要备份的数据库名称。
> mydb_backup.dump:将备份内容输出到名为mydb_backup.dump的文件中,你可以根据自己的喜好更改文件名。
在这里插入图片描述

恢复数据库(使用pg_restore)

在删除mydb并创建mybdtest后,使用pg_restore命令来恢复备份的数据到mybdtest数据库。假设你的用户名、主机地址等信息不变,执行以下命令:
pg_restore -U postgres -h localhost -d mybdtest mydb_backup.dump

命令解释:
-U postgres:指定以postgres用户身份进行恢复操作。
-h localhost:指定数据库主机地址为本地。
-d mybdtest:指定恢复数据的目标数据库为mybdtest。
mydb_backup.dump:要恢复的备份文件的名称,需要与备份时的文件名一致。
需要注意的是,在执行这些命令时,可能需要确保postgres用户有足够的权限进行备份和恢复操作。如果数据库设置了密码,可能还需要在命令中正确提供密码,或者设置PGPASSWORD环境变量来存储密码,这样就不用每次在命令中输入密码了。例如,可以在执行命令前设置环境变量:export PGPASSWORD=your_password

在这里插入图片描述

在这里插入图片描述

方法二
使用 ALTER DATABASE(在某些特定版本和场景下可能有限制)
在一些较新的 PostgreSQL 版本中,理论上可以尝试使用 ALTER DATABASE 语句来更改数据库名称,但这种方法可能会受到一些限制,比如数据库的使用状态、权限等因素可能会影响其成功与否。
假设你在 psql 命令行环境下并且有足够的权限,你可以尝试以下操作:
ALTER DATABASE mydb RENAME TO mybdtest;
如果此操作成功,那么数据库名称就直接被更改为 mybdtest 了。但如果遇到错误,可能就需要按照方法一的步骤来完成更名操作啦。
需要注意的是,无论使用哪种方法,在进行这些操作之前,都建议你先对重要数据进行备份,以防出现意外情况导致数据丢失。

在这里插入图片描述

修改表名称

要将表名 student 修改为 student_info,可以使用 ALTER TABLE 语句来实现。以下是具体的操作步骤:

-- 将表student修改为student_info
ALTER TABLE student RENAME TO student_info;

在这里插入图片描述

修改表字段信息

修改表字段名称、字段类型、字段注释
这块我有一篇博客根据各种情况都有对应的命令说明可以点我去看
在这里插入图片描述

一、修改列名
将 student_id 修改为 stu_id:
ALTER TABLE student_info RENAME COLUMN student_id TO stu_id;

二、修改数据类型
将 student_name 的数据类型从 character varying(50) 修改为 character(20):
ALTER TABLE student_info ALTER COLUMN student_name TYPE character(20);

三、修改数据类型及注释
先将 student_gender 的数据类型从 character(1) 修改为 integer:
# ALTER TABLE student_info ALTER COLUMN student_gender TYPE integer;
如果执行上面sql一定会报错的,因为上面这种情况只适合修改前后数据类型一致的情况,需要执行下面sql,
但是不保证一定成功,除非你存储的数据能成功转换为目标类型,像我实践中就报错,所以要保证数据的合理性

ALTER TABLE student_info
ALTER COLUMN student_gender TYPE integer
USING CAST(student_gender AS integer);

然后为 student_age 添加注释 “学生年龄”。在 PostgreSQL 中,添加列注释可以使用 COMMENT ON COLUMN 语句:
COMMENT ON COLUMN student_info.student_age IS '学生年龄';

完成上述操作后,你可以再次使用 d student_info 命令来查看表结构的变化情况,此时表结构应该符合你修改后的要求。 
d student_info

在这里插入图片描述

在这里插入图片描述

关于看不见添加的注释问题原因分析:

d student_info 命令来查看表结构。这个命令在某些数据库客户端中可能不会显示列注释。
你可以尝试使用以下查询语句来查看带有注释的表结构:

SELECT column_name, data_type, column_default, is_nullable, col_description((table_schema || '.' || table_name)::regclass,ordinal_position) AS comment
FROM information_schema.columns
WHERE table_schema = 'public' AND table_name = 'student_info';

在这里插入图片描述

这个查询会从 information_schema.columns 中获取列的详细信息,包括注释。

数据库配置或客户端问题
有些数据库客户端可能不支持显示注释,或者需要特定的设置才能显示注释。你可以检查一下你使用的数据库客户端的设置,看是否有相关选项可以启用注释显示。

注释未正确添加
虽然从截图中看到了添加注释的操作,但有可能由于某种原因(例如权限问题或数据库错误)导致注释没有成功添加。你可以尝试重新添加注释,然后使用上述查询语句来验证注释是否添加成功。

删除库表

一般来说直接 drop database mydb;就可以删除掉数据库了,下面我们说下相关注意事项
在这里插入图片描述
执行这条命令之前要确保你当前没有连接到 mydb 数据库哦,不然也会报错无法删除的。
一般可以先通过 c 命令切换到其他数据库(比如 postgres),然后再执行删除 mydb 的操作。
例如:
c postgres
drop database mydb;

当前还有其他用户(或者其他会话)正在连接并使用 mydb 数据库时,是无法直接删除它的。

你可以通过以下几种方法来解决这个问题并成功删除 mydb 数据库:
方法一:终止其他正在使用的会话
首先,你需要查看当前正在使用 mydb 数据库的会话信息。可以使用以下查询语句(在 postgres 数据库下执行):
SELECT pid, usename, datname, application_name, client_addr, client_hostname, client_port FROM pg_stat_activity WHERE datname ='mydb';
这条查询语句会列出正在使用 mydb 数据库的会话的进程 ID(pid)、用户名(usename)、数据库名(datname)、应用程序名(application_name)、客户端地址(client_addr)、客户端主机名(client_hostname)以及客户端端口(client_port)等信息。

找到对应的会话进程 ID 后,你可以使用以下命令来终止该会话(需要有足够的权限,比如超级用户权限):
SELECT pg_terminate_backend(pid);
这里的 pid 就是你在上一步查询中找到的那个正在使用 mydb 数据库的会话的进程 ID。
终止所有正在使用 mydb 数据库的会话后,再尝试执行删除数据库的命令:
drop database mydb;

方法二:等待其他会话结束自行使用
如果你确定其他正在使用 mydb 数据库的会话会在不久后自行结束,你可以稍作等待,然后再重新尝试执行删除数据库的命令:drop database mydb;
不过这种方法可能不太确定需要等待多长时间,而且如果其他会话一直不结束,就无法顺利删除数据库啦。

pgsql删除正在使用的数据库

这个了解一下就行,也就测试阶段使用

-- 设置数据库禁止连接
UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'db_name';
-- 中断当前所有连接会话
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'db_name';
-- 删除数据库
drop database db_name;

在这里插入图片描述


原文地址:https://blog.csdn.net/m0_74823947/article/details/145198052

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!