当前位置: 代码迷 >> 综合 >> Postgresql 入门(1)
  详细解决方案

Postgresql 入门(1)

热度:64   发布时间:2023-10-13 12:09:24.0

本文最后附上安装过程中遇到的问题,可以参考。

一、安装postgresql

打开postgresql 中文社区,参考其安装过程,傻瓜式操作。

其中需要装有 bzip2(解压命令)、gcc、gcc-c++、(这些是编译使用)

# 一般在编译前,还需要这些库:
yum install -y gcc gcc-c++
yum install docbook-dtds docbook-style-xsl fop libxslt -yyum install readline-devel.x86_64  zlib-devel.x86_64 -y
yum install -y ncurses-devel

下面是postgresql社区提供的解压指令:解压编译即可安装好postgresql了。

wget https://ftp.postgresql.org/pub/source/v12.2/postgresql-12.2.tar.bz2
tar xjvf postgresql*.bz2 #解压至一个目录
cd potgresql-12.2# 这几步操作需要费些时间,耐心等待
./configure --prefix=/opt/pgsql #拟安装至/opt/pgsql
make world
make install-worldadduser postgres #增加新用户,系统提示要给定新用户密码
mkdir /opt/pgsql/data #创建数据库目录
chown -R postgres:postgres /opt/pgsql/data
su - postgres #使用postgres帐号操作
/opt/pgsql/bin/initdb -D /opt/pgsql/data #初始化数据库
/opt/pgsql/bin/pg_ctl -D /opt/pgsql/data -l logfile start #启动数据库
/opt/pgsql/bin/createdb genericdb #假定数据库名为gerericdb)
/opt/pgsql/bin/psql genericdb # (进入数据库内部)

这里已经完成了基本安装,接下来使用上面创建的postgre用户操作数据库了。

如果中途./configure失败:

error1:configure: error: C preprocessor "/lib/cpp" fails sanity checkyum install kernel-headers

二、使用前的一些操作:

安装一些辅助工具

yum install mlocate # 这个工具可以帮我们查找psql:locate psql | grep /bin
updatedb
# 如果没有updatedb更新后台数据库,直接输入查找命令:locate,还是未能找到命令。
# 原因是Linux不是实时更新它的后台数据库,所以我们并不能马上执行。
locate inittab

执行 locate psql | grep /bin,查到的第一个就是我们需要的
Postgresql 入门(1)
编辑.bash_profile文件或.bashrc文件,添加命令别名

alias psql=/user/local/mysoft/pgsql/bin/psql

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

[root@localhost postgres]# su root #首先切换到postgres
[root@localhost postgres]# su - postgres #首先切换到postgres
[postgres@localhost ~]$ psql
psql (12.2)
Type "help" for help.postgres=# 

此时就在数据库postgres中了。使用 psql -d [databasename] 可登录其他数据库。注意:执行psql命令时,必须确认已配置postgresql的环境变量。

基本使用

更多使用参考菜鸟教程

创建用户

postgres=# create user adam with password '123456';
CREATE ROLE
postgres=#

需要注意: 本文使用的username均是根据自己的喜欢命名
 1. 要以英文分号结尾
2.密码需要引号包裹
3.用户名首字母不能大写

创建数据库

postgres=# create database testdb owner adam;
CREATE DATABASE

将数据库得权限,全部赋给某个用户

# 将dbtest所有权限赋值给username
postgres=# grant all on database testdb to adam; 
GRANT

查看版本

postgres=# select version();version                                                 
---------------------------------------------------------------------------------------------------------PostgreSQL 12.2 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44), 64-bit
(1 row)

查看数据库大小

postgres=# SELECT pg_size_pretty(pg_database_size('testdb')) As fulldbsize; fulldbsize 
------------7809 kB
(1 row)

查看所有的数据库的大小:

postgres=# select pg_database.datname, pg_size_pretty (pg_database_size(pg_database.datname)) AS size from pg_database; datname  |  size   
-----------+---------postgres  | 7953 kBtemplate1 | 7809 kBtemplate0 | 7809 kBtestdb    | 7809 kB
(4 rows)

Postgresql 入门(1)

查看各数据库数据创建时间:

select datname,(pg_stat_file(format('%s/%s/PG_VERSION',
case
when spcname='pg_default' then 'base'
else 'pg_tblspc/'||t2.oid||'/PG_11_201804061/'
end,
t1.oid))).*
from pg_database t1,pg_tablespace t2 where t1.dattablespace=t2.oid;

Postgresql 入门(1)

按占空间大小,顺序查看所有表的大小

select relname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_tables where schemaname='public' order by pg_relation_size(relid) desc;

按占空间大小,顺序查看索引大小

select indexrelname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_indexes where schemaname='public' order by pg_relation_size(relid) desc;

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

[postgres@localhost ~]$ psql -d testdb
psql (12.2)
Type "help" for help.testdb=# grant all privileges on database testdb to adam;
GRANT

配置远程访问

PATH=$PATH:$HOME/.local/bin:$HOME/binexport PATHexport PGPORT=8432
export PGHOME=/user/local/mysoft/pgsql
export PGDATA=/user/local/mysoft/pgsql/data
export PATH=$PGHOME/bin:$PATH
export MANPATH=$PGHOME/share/man:$MANPATH
export LANG=en_US.UTF-8
export DATE='date +"%Y%m%d%H%M"'
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgresPATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin
export PATH

执行指令使之生效 source /home/postgres/.bash_profile

执行下面指令之后就可以外网navicat访问了

[root@localhost etc]# firewall-cmd --zone=public --add-port=5432/tcp --permanent
success
[root@localhost etc]# firewall-cmd --reload
success

配置navicat连接

配置原创访问和外网访问的指令之后,可以远程连接了。
Postgresql 入门(1)

connections on Unix domain socket “/usr/mysoft/pgsql/data/.s.PGSQL.5432”?

[postgres@localhost ~]$ psql -U postgres -d postgres
psql: error: could not connect to server: could not connect to server: No such file or directoryIs the server running locally and acceptingconnections on Unix domain socket "/usr/mysoft/pgsql/data/.s.PGSQL.5432"?
[postgres@localhost ~]$ ln -s /tmp/.s.PGSQL.5432 /usr/mysoft/pgsql/data/.s.PGSQL.5432 #创建软连接
[postgres@localhost ~]$ ./postrestart.sh 
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started
[postgres@localhost ~]$ psql
psql (12.2)
Type "help" for help.# 如果上面还不成功 可以修改 pg_hba.conf文件,在local all postgres trust 中添加 local all postgres trust
# 使postgres可以访问。此处的postgres用户并非Linux系统的postgres用户,而是export PGUSER=postgres中的用户
[root@localhost etc]# vi /usr/mysoft/pgsql/data/pg_hba.conf # "local" is for Unix domain socket connections only
local   all             all                                     trust
local   all             postgres                                trust[postgres@localhost ~]$ ./postrestart.sh 

Postgresql 入门(1)

PG::Error: ERROR: permission denied to create database

使用普用户创建数据库时候
PG::Error: ERROR: permission denied to create database解决方式:
使用postgres 登录
sudo -u postgres psqlpostgres=# ALTER ROLE xxxx CREATEROLE CREATEDB;xxxx: 普通用户名称赋予超级权限
ALTER ROLE xxxx CREATEROLE SUPERUSER;[postgresql官网](http://www.postgresql.org/docs/9.2/static/sql-alterrole.html)
  相关解决方案