PostgreSQL 10操作快速入门实验

    技术2022-07-11  94

    PostgreSQL 10操作快速入门实验

    文章目录

    PostgreSQL 10操作快速入门实验一、安装VirtualBox(自行Google)二、在VirtualBox上安装CentOS7(自行Google)三、安装 PostgreSQL on CentOS7四、常用基本操作五、完整的导入数据操作流程

    参考 PostgreSQL学习手册:https://www.postgresql.org/docs/10/

    实验前提:先在电脑上用VirtualBox安装一台CentOS7虚拟机,然后在CentOS7上安装 PostgreSQL 10

    一、安装VirtualBox(自行Google)

    二、在VirtualBox上安装CentOS7(自行Google)

    三、安装 PostgreSQL on CentOS7

    sudo yum update -y yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pgdg-centos10-10-2.noarch.rpm -y yum install postgresql10-contrib postgresql10-server -y rpm -qa | grep postgresql 输出结果: postgresql10-server-10.11-2PGDG.rhel7.x86_64 postgresql10-libs-10.11-2PGDG.rhel7.x86_64 postgresql10-10.11-2PGDG.rhel7.x86_64 postgresql-libs-9.2.24-1.el7_5.x86_64 postgresql10-contrib-10.11-2PGDG.rhel7.x86_64 [root@vl-bg-anaylsis02 ~]# /usr/pgsql-10/bin/postgresql-10-setup initdb 输出结果: Initializing database ... OK # 启动postgresql [root@vl-bg-anaylsis02 ~]# sudo systemctl start postgresql-10 # 设置开机自动启动 [root@vl-bg-anaylsis02 ~]# sudo systemctl enable postgresql-10.service # postgres账号登录psql su - postgres psql # 在psql中对postgresql进行操作 postgres=# ALTER USER postgres WITH PASSWORD 'post123' postgres-# \du postgres=# \l postgres=# \q # 切换到系统的root账号,对配置文件进行配置 su - root vi /var/lib/pgsql/10/data/postgresql.conf /var/lib/pgsql/10/data/postgresql.conf配置文件更改后的最终内容: ---------------------------------------------------------------------------- listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) port = 5432 # (change requires restart) max_connections = 100 # (change requires restart) #superuser_reserved_connections = 3 # (change requires restart) #unix_socket_directories = '/var/run/postgresql, /tmp' # comma-separated list of directories # (change requires restart) #unix_socket_group = '' # (change requires restart) #unix_socket_permissions = 0777 # begin with 0 to use octal notation # (change requires restart) #bonjour = off # advertise server via Bonjour # (change requires restart) #bonjour_name = '' # defaults to the computer name # (change requires restart) # - Security and Authentication - #authentication_timeout = 1min # 1s-600s #ssl = off #ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # allowed SSL ciphers #ssl_prefer_server_ciphers = on #ssl_ecdh_curve = 'prime256v1' #ssl_dh_params_file = '' #ssl_cert_file = 'server.crt' #ssl_key_file = 'server.key' #ssl_ca_file = '' #ssl_crl_file = '' password_encryption = md5 # md5 or scram-sha-256 ---------------------------------------------------------------------------- vi /var/lib/pgsql/10/data/pg_hba.conf ---------------------------------------------------------------------------- /var/lib/pgsql/10/data/pg_hba.conf配置文件更改后的最终内容: # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all peer # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 md5 host replication all ::1/128 md5 host all all 0.0.0.0/0 md5 ----------------------------------------------------------------------------- # 重启postgresql systemctl restart postgresql-10 systemctl status postgresql-10 # 通过以下步骤,禁用防火墙才能从其他主机访问 systemctl stop firewalld.service firewall-cmd --state # 失效防火墙开机自动启动 systemctl disable firewalld.service systemctl restart postgresql-10.service

    四、常用基本操作

    # 用postgres 管理员账号登录postgresql数据库 psql -U postgres -h 10.20.253.11 -p 5432 -d 'password' # 创建数据库新用户,如 la_admin CREATE USER la_admin WITH PASSWORD '*****'; # 创建用户数据库,如:la_test CREATE DATABASE la_test OWNER la_admin; # 将la_test数据库的所有权限都赋予la_admin: GRANT ALL PRIVILEGES ON DATABASE la_test TO la_admin; # 创建Schema: grade create schema grade; # 创建角色组及其membership CREATE ROLE father LOGIN SUPERUSER CREATEDB CREATEROLE NOINHERIT; CREATE ROLE son LOGIN INHERIT encrypted password 'son123'; GRANT father To son; # 参考 https://www.postgresql.org/docs/10/role-membership.html

    五、完整的导入数据操作流程

    # 创建用于导入数据的用户 CREATE USER la_user WITH PASSWORD 'user123'; # 查看用户及权限 \du # 将数据库 la_test 权限授权于 user GRANT ALL PRIVILEGES ON DATABASE la_test TO la_user; # 但此时用户还是没有读写权限,需要继续授权表 # Note: 该sql语句必须在所要操作的数据库里执行 # 将当前数据库下 grade schema 的表都授权于 user GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA grade TO la_user; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA grade TO la_user; GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA grade TO la_user; # 赋予角色权限(因为涉及到要创建表,给了superuser等权限,表创建完毕后要将权限收回) ALTER ROLE la_user WITH SUPERUSER CREATEDB CREATEROLE; # 将 mytable 这张表的查询权限授予 user(可选操作) GRANT SELECT ON TABLE mytable TO la_user; # 再次确认用户及权限 \du # 查看某用户的表权限 select * from information_schema.table_privileges where grantee='la_user'; # 撤销在某表上的用户权限(可选操作) REVOKE privileges ON tablename FROM la_user; # 例如:REVOKE ALL PRIVILEGES ON grade.study_plan_desc FROM la_user; # 在本地传输导入数据文件至数据库服务器 scp 本机文件路径 scp /本机文件路径/study_plan_desc.csv user@10.20.253.11:/tmp/ # 通过新建的账号进入postgresql psql -U user -h 10.xx.xx.xx -p 5432 -d la_test # 在la_test数据库grade schema上创建表 create table grade.study_plan_desc( acad_plan character varying not null, descr character varying, diploma_descr character varying, descr_chi character varying ); # 取消角色权限(权限过大不安全) ALTER ROLE user WITH NOSUPERUSER NOCREATEDB NOCREATEROLE; # 查看数据表编码: \encoding # 修改数据库编码为支持中文导入的编码GBK: \encoding GBK 或 update pg_database set encoding = pg_char_to_encoding('GBK') where datname='la_test'; # postgresql中导入数据的语句 COPY grade.study_plan_desc FROM '/tmp/study_plan_desc.csv' DELIMITER ',' CSV HEADER; # 先把编码改回UTF8,查询时才会显示正常的中文 \encoding UTF8 # postgresql中查询数据的语句 select * from grade.study_plan_desc limit 10; # 使用命令 \q 退出psql: postgres=# \q
    Processed: 0.010, SQL: 9