PostgreSQL的使用

PG控制台常用的命令

设置密码

\password

退出

\q

查看SQL命令的解释,比如 \h select

\h

查看psql命令列表

\?

列出所有数据库

\l

连接其他数据库

\c [database_name]

列出当前数据库的所有表格

\d

列出某一张表格的结构

\d [table_name]

列出所有用户

\du

显示所有表的权限

\dp

 

数据库操作 

登录数据库

psql -h 服务器 -U 用户名 -d 数据库 -p 端口地址   // -U 是大写

psql -U dbuser -d example -h 127.0.0.1 -p 5432

psql (连接数据库,默认用户和数据库都是postgres)

相当于系统用户postres以同名数据库用户的身份,登录数据库,这是不用输入密码的,如果一切正常,系统提示符会变为“postgres=#", 表示这时已经进入了数据库控制台。

 

创建数据库

create database mydb;

在linux 命令行下创建数据库

createdb mydb;

删除数据库

drop database mydb;

 

数据库表操作

创建表格时每列必须使用数据类型,PostgreSQL中主要有三类数据类型:

数值数据类型

字符串数据类型

日期/时间数据类型

 

创建表

create table test(id serial primary key, name varchar(255));

插入数据

insert into test(name) values('jack');

显示表结构

\d test;

查询数据

select * from test;

更新数据

update test set name='mayun' where id = 1;

删除数据

delete from test where id = 1;

 

Schema

创建schema

create schema myschema;

创建表在schema下面

create table myschema.test(id int, name varchar(255));

 

如何备份PostgreSQL数据库

如果您在生产环境中使用PostgreSQL, 请务必采取预防措施以确保用户的数据不会丢失。

单数据库

PostgreSQL提供了pg_dump实用程序来简化备份单个数据库的过程。必须以对要备份的数据库具有读取权限的用户身份运行次命令。

以postgres用户身份登录:

sudo su - postgres

生成的备份文件dbname.bak可以使用scp传输到另一台主机,也可以存储在本地供以后使用。

要演示恢复丢失的数据,请删除示例数据库并在其位置创建一个空数据库:

使用psql恢复数据库

psql test < dbname.bak

备份格式有几种选择:

*.bak: 压缩二进制格式

*.sql: 明文转储

*.tar: tarball

注意:默认情况下,PostgreSQL将忽略备份过程中发生的任何错误。这可能导致备份不完整。要防止这种情况,您可以使用-l选项运行pg_dump命令。这会将整个备份过程视为单个事务,这将在发生错误时阻止部分备份。

 

所有数据库

由于pg_dump一次只创建一个数据库的备份,因此它不会存储有关数据库角色或其他群集范围配置的信息,要存储此信息并同时备份所有数据库,可以使用pg_dumpall。

创建备份文件:

pg_dumpall > pg_backup.bak

从备份还原所有数据库:

psql -f pg_backup.bak postgres

示例:

#备份数据库

pg_dump -U postgres -f /tmp/postgres.sql postgres (导出postgres数据库保存为postgres.sql)

pg_dump -U postgres -f /tmp/postgres.sql -t test postgres (导出postgres数据库中表test的数据)

pg_dump -U postgres -F t -f /tmp/postgres.tar postgres (导出postgres数据库以tar形式压缩保存为postgres.tar)

#恢复数据库

psql -U postgres -f /tmp/postgres.sql bk01 (恢复postgres.sql数据到bk01数据库)

#pg_restore -- 从pg_dump创建的备份文件中恢复PostgresSQL数据库,用于恢复由pg_dump转储的任何非纯文本格式中的PostgreSQL数据库。

pg_restore -U postgres -d bk01 /tmp/postgres.tar (恢复postgres.tar数据到bk01数据库)

 

用户操作

数据库授权,赋予指定账户指定数据库权限

GRANT ALL PRIVILEGES ON DATABASE 'dbname' TO 'username';

将数据库mydb权限授予test

GRANT ALL PRIVILEGES ON DATABASE mydb TO test;

但此时用户还是没有读写权限,需要继续授权表。 (注意:该SQL语句必须在所要操作的数据库里执行)

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO xxx;

 

使用username登录myDatabase数据库

psql -U username -d myDatabase;

移除username在myDatabase数据库上的所有权限

revoke all privileges on database myDatabase from username;

移除username在表上的所有权限

revoke all privileges on all tables in schema public from username;

删除用户

drop user username;

 

创建角色
create role david; -- (Attributes: Cannot login)

创建用户

create user sandy; --  (Attributes: Superuser, Create role, Create DB, Replication, Bypass RLS)

查询角色

select * from pg_roles;

查询用户

select * from pg_user;

允许用户/角色登录

alter role david with LOGIN;

创建用户并设置密码

CREATE USER 'username' WITH PASSWORD 'password';

eg: create role renee password 'abc123' LOGIN;

修改用户密码

ALTER USER 'username' WITH PASSWORD 'password';

给已存在的用户赋予各种权限

  赋予登录权限

  ALTER  ROLE rolename WITH  LOGIN;

  赋予renee创建角色权限

  ALTER ROLE renee WITH CREATEROLE;

posted @ 2023-08-01 09:01  灰色人生qwer  阅读(98)  评论(0编辑  收藏  举报