发新帖

[Postgresql] 命令行方式登录PostgreSQL

零下一度 2020-12-15 1579

一、在默认配置条件下,本机访问PostgreSQL

切换到Linux用户postgres,然后执行psql:

su - postgres
Last login: Wed Mar 1 13:16:48 CST 2017 on pts/1
-bash-4.2$ psql
psql (9.2.18)
Type "help" for help.
postgres=#

此时就在数据库postgres中了。


二、创建新用户来访问PostgreSQL

1、如上所述,先切换到Linux用户postgres,并执行psql:

$ su - postgres
-bash-4.2$ psql
postgres=#

现在位于数据库提示符下。


2、创建数据库新用户,如 dbuser:

postgres=# CREATEUSER dbuser WITH PASSWORD '*****';

注意:

语句要以分号结尾。

密码要用单引号括起来。


3、创建用户数据库,如exampledb:

postgres=# CREATE DATABASE exampledb OWNER dbuser;


4、将exampledb数据库的所有权限都赋予dbuser:

postgres=# GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser;

添加授权

create user dbuser CREATEDB CREATEUSER;
alter database exampledb owner to dbuser; 
grant all privileges on database exampledb to dbuser

撤销授权

revoke all on database exampledb from dbuser


5、使用命令 \q 退出psql:

postgres=# \q


6、创建Linux普通用户,与刚才新建的数据库用户同名,如 dbuser:

sudo adduser dbuser 
sudo passwd dbuser


7、以dbuser的身份连接数据库exampledb:

su - dbuser
Last login: Wed Mar 1 11:52:07 CST 2017 on pts/ 
[dbuser@master ~]$ psql -d exampledb


三、最简单的做法

以你的普通Linux用户名,在数据库中创建同名的用户和数据库,如xxf,然后就可以本机直接连接到数据库xxf了。

su - postgres
Password:
Last login: Wed Mar 1 13:19:02 CST 2017 on pts/1
-bash-4.2$ psql
psql (9.2.18)
Type "help" for help.
postgres=# create user xxf with password '******';
CREATE ROLE
postgres=# create database xxf owner xxf;
CREATE DATABASE
postgres=# grant all privileges on database xxf to xxf;
GRANT
postgres=# \q
-bash-4.2$ exit
logout
~> psql
psql (9.2.18)
Type "help" for help.
xxf=>

至此,就在数据库xxf中了。


四、开启远程访问

1、编辑配置文件

文件:postgresql.conf

位置:/var/lib/pgsql/data/postgresql.conf

添加/修改:在所有IP地址上监听,从而允许远程连接到数据库服务器:

listening_address: '*'

文件:pg_hba.conf

位置:/var/lib/pgsql/data/pg_hba.conf

添加/修改:允许任意用户从任意机器上以密码方式访问数据库,把下行添加为第一条规则:

host    all             all             0.0.0.0/0               md5


2、重启数据库服务:

sudo systemctl restart postgresql


3、此后即可从其它机器上登录,例如用Navicat for PostgreSQL:

主机名或IP: 172.*.*.*

端口:          5432

初始数据库: xxf

用户:          xxf

密码:          ******  (数据库用户xxf的密码,不是Linux用户xxf的密码)


五、postgres数据库调优

https://www.cnblogs.com/shanyou/p/3495935.html


对于PostgreSQL参数说明:

(1)与连接相关的参数。

listen_addresses:用来指定服务器监听TCP/IP地址,改变该参数时,需要重启数据库服务。如果存在多个IP,我们在配置的时候,使用逗号进行分隔。默认为localhost,表示只允许本地进行连接。我们也可以配置为“*”或是“0.0.0.0”,表示监听本机上的所有IP。具体更精通的网络控制的配置,是由配置文件pg_hba.conf配置文件来完成的(该配置文件类似于Oracle里的sqlnet.ora),在后续,我会再介绍该配置文件。

port:用来指定监听的端口,默认为5432,改变后,需要重启数据库服务。

max_connections:指定数据库允许的最大并发连接数,改变该参数需要重启数据库服务。该参数类似于Oracle里面的processes,sessions。

superuser_reserved_connections:指定PostgreSQL超级用户预保留的连接数,默认为3,改变后需要重启数据库服务。配置该参数的目的是防止普通用户把连接数占用完而超级用户连接不上。

unix_socket_directory:指定服务器监听客户端连接的unix套接字目录,该参数只能在编译的时候修改,默认为/tmp。

unix_socket_group:设置unix域套接字所属的组(套接字所属用户总是启动服务器的用户),改变该参数需要重启数据库服务。

unix_scoket_permissions:设置 unix域套接字的访问权限,默认为0777, 改变该参数需要重启数据库服务。

tcp_keepalives_idle:表示在一个TCP连接当中空闲多长时间后会发送一个keepalive报文,默认为0,表示使用操作系统设置的默认值。

tcp_keepalives_count:表示在一个空间的TCP连接上,发送keepalive报文后,如果一直没有收到回应,最多发送多少次后,就认为该连接已经中断了。

tcp_keepalives_interval:表示如果在发送一个keepalive包后,如果没有收到回应,再间隔多长时间发送一个。

与内存相关的配置项:

shared_buffers;该参数用来指定数据库服务器使用的共享内存的数量。一般情况下,设置为物理内存的25%。

该参数的值必须大于16,并且至少是max_connections数值的两倍。

temp_buffers:设置每个数据库会话使用临时缓冲区的最大数目,此内存结果只用于缓冲临时表的数据。

work_mem:用来指定一些排序或是散列操作所使用内存数目,如果所进行的操作超过了当前设置的大小,那么它会使用临时磁盘文件。

maintenance_work_mem:指定在进行维护性操作(比如create index,vacuum等)时所使用的最大内存量。

max_stack_depth:用来指定服务器执行堆栈的最大安全深度,默认为2M,如果发现不能运行复杂的函数,可以适当地提高此参数的值。

关于WAL日志一些参数:

wal_level:指定生成wal日志的级别,值为minmal,archive,hot_standby。 minmal一般的配置, archive会生成wal归档需要的日志记录, hot_standby添加备库时需要设置。 

fsync:表示是否使用fsync()系统调用把文件系统中的脏页刷新到物理磁盘,确保数据库在崩溃的情况下可以恢复到崩溃前的状态,该值默认为true。

synchronous_commit:表示提交一个事务后,是否需要等待把wal日志写到磁盘后再返回,默认为true。

wal_sync_method:用来指定向磁盘强制更新wal日志的方法,一般采用默认值就OK。

full_page_writes:值为true或false,如果打开该选项时,PostgreSQL服务器会在检查点之后对页面第一次修改时将整个页面写到wal日志。

wal_buffers:用来指定在共享内存里用于存储wal日志的缓冲区数目,默认为8,即可64K,通常此参数设置为8——128(即64K到1M)就可以了。

wal_writer_delay:指定wal writer process把wal日志写入到磁盘的周期,默认为200毫秒。

commit_delay:用来指定向wal缓冲区写入记录和将缓冲区刷新到磁盘之间的时间延迟,默认0,表示没有延迟,单位为微秒。

commit_siblings:在执行commit_delay延迟时,要求同时打开的最少并发事务数,默认为5。

关于错误日志的一些参数:

logging_collector = on,表示打开日志搜集。

log_rotation_age:表示日志超过多长时间就生成一个新的日志文件。

log_rotation_size:表示日志超过多大的时候就会生成一个新的日志文件。

log_filename:指定日志文件名,比如log_filename = 'postgresql-%Y-%m-%d_%u.log'。

log_directory:用来指定日志文件生成的目录。

另外,还有如下一些日志参数也可能会用到:

debug_print_parse:设置为on时,把SQL的解析树输出到日志中。

debug_print_rewritten:设置为on时,把SQL的查询重写打印到日志中。

debug_print_plan:设置为on时,把SQL的执行计划打印输出到日志中。

debug_pretty_print:美化上述的三种输出,使其更容易阅读。

log_checkpoint:是否记录checkpoint。

log_connections:是否记录客户端的连接。

log_disconnections:是否记录客户端断开的连接。

log_duration:是否记录每个已完成语句的持续时间。

log_hostname:是否记录客户端的主机名。

log_lock_waits:当一个会话的等待时间超过deadlock_timeout时,是否记录一条日志到日志文件中 



最新回复 (0)
返回
零下一度
主题数
957
帖子数
0
注册排名
1