Ubuntu下PostgreSQL的安装与利用

打印 上一主题 下一主题

主题 1988|帖子 1988|积分 5964

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
引言(Introduction)

一、安装

本文先容不同需求下的PostgreSQL安装:(1) 对安装版本无特定要求 (2) 需要安装特定版本
1. 对安装版本无特定要求

  1. sudo apt install postgresql postgresql-contrib
复制代码
2. 需要安装特定版本

2.1 Ubuntu版本被支持

PostgreSQL官网PostgreSQL: Linux downloads (Ubuntu)
假如您的Ubuntu/Debian是以下版本,则可以根据官网给出的方法进行安装,其中‘postgresql-15’可以被更换为官网支持的任意版本

  
  1. sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
  2. wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  3. sudo apt-get update
  4. sudo apt-get -y install postgresql-15
复制代码
 2.2 Ubuntu版本不被支持

由于我的服务器系统是Ubuntu18.04,通过下述命令安装的PostgreSQL是默认版本10.6,而实行中需要利用到PostgreSQL的最新版本。而Ubuntu版本又不被支持,因此接纳源码安装。
(1) 下载tar文件并解压

  1. wget -i https://ftp.postgresql.org/pub/source/v15.2/postgresql-15.4.tar.gz
  2. tar -zxvf postgresql-15.4.tar.gz
复制代码
(2) 设置设置信息

解压后会得到一个postgresql-15.4的文件夹,进入该文件夹,其中configure是设置文件,可以通过以下指令查看怎样进行设置
[指令执行路径:解压后的文件夹]
  1. ./configure --h
复制代码
其设置信息如下:

* 通过'--prefix=xxxx'设置文件的安装位置,默认安装位置在'/usr/local/pgsql/bin', ''/usr/local/pgsql/lib'

别的设置这里就不全部展开,这里将设置安装位置和开启quiet(不开启不影响功能,就是在运行时会有大量形如‘checking ...'的信息,不便于获取运行结果),其中'home/PG/15.4'是我设定的安装路径。
  1. ./configure --prefix=/home/PG/15.4 --quiet
复制代码
(3) 编译 make

[指令执行路径:解压后的文件夹]
  1. make && make install
复制代码
编译完成之后,可以通过’ls‘指令查看当前路径下的文件,可以看到天生了bin,share文件夹。假如想查看现有的设置信息,可以进入bin,运行pg_config文件
[指令执行路径:指定的安装位置]
  1. cd bin
  2. ./pg_config
复制代码
为了后面可以通过‘psql’命令连接服务器,要将该bin路径添加到PATH变量中。不添加也可以,可以通过在该路径下运行‘./psql’实现
(4) 创建数据库集群

[指令执行路径:指定的安装位置/bin]
运行initdb来初始化一个数据库集群,其概念见附录。可以通过以下指令查看该怎样进行初始化
  1. ./initdb --help
复制代码
其中 -D 用来指定集群目录所在的路径,这是必选的参数;
        -U 指定数据库的超等管理员用户名,这是可选参数,默认与当前的系统用户名同名;
       -W 提示输入密码,这个密码是超等管理员用户的登岸密码,默认为空;
  1. ./initdb -D /home/PG/DATA -U postgres
复制代码
二、运行与登录

我们要进入某个数据库集群,首先要确保该集群在运行,然后将用户切换到该集群的用户,再执行psql连接该集群中的某个数据库
 1.启动数据库集群

[指令执行路径:指定的安装位置/bin]
  1. ./pg_ctl -D /home/PG/DATA start
复制代码
  1. # 也可以不指定路径
  2. ./pg_ctl start
复制代码

2.切换用户

假如当前账号就是postgres的用户,该步可以省略。其中’username'为postgres的用户名,一般为postgres或者你的系统用户名
  1. su username
复制代码
3.执行psql连接该集群中的某个数据库

当psql后面为空,会默认连接和当前用户名同名的数据库
假如你当前的用户名是‘postgres’,直接输入psql就可以进入postgres数据库,该数据库是创建数据集群时就主动带的默认数据库。假如你当前的用户名不是‘postgres’,但是数据库集群中有和你当前用户名同名的数据库,输入psql就会连接上和你当前同名的的数据库
  1. psql
复制代码
假如你当前的用户名不是‘postgres’,且数据库集群中没有和你当前用户名同名的数据库,就会报数据库不存在的错误,怎样你数据集群里未创建任何数据库,就利用‘psql postgres’
  1. psql database_name
复制代码
 假如你没有将bin的路径参加PATH,会出现Command 'psql’ not found的问题,你可将其参加PATH,或者在bin路径下执行‘./psql postgres ’

三、利用

1.常用命令

  1. \d            # 当前数据库中数据表信息
  2. \d+
  3. \d tablename
  4. \du           # 当前数据库所有用户
  5. \db           # 当前所有表空间
复制代码
  1. \c dbname     # 切换到数据库dbname
  2. \i file       # 执行file文件中的sql语句
  3. \q            # 退出
  4. \?            # 帮助
复制代码
  1. create database dbname;     # 创建数据库dbname
  2. create table tablename;     # 创建表tablename
  3. drop table tablename;       # 删除表tablename
复制代码
  1. copy tablename from 'path' with delimiter as '|' NULL '';
复制代码
2.常见问题

2.1.无法启动服务器

(1) 报错信息

pg_ctl: another server might be running; trying to start server anyway
waiting for server to start....2024-03-26 15:12:31.539 CST [33788] FATAL:  lock file "postmaster.pid" already exists
2024-03-26 15:12:31.539 CST [33788] HINT:  Is another postmaster (PID 30917) running in data directory "/home/css/PostgreSQL15/DATA"?
 stopped waiting
pg_ctl: could not start server
Examine the log output.

(2) 缘故原由分析与办理

已经有另一个 PostgreSQL 服务器实例正在运行,由于在实行过程中我利用了Xshell远程连接服务器,通过其对服务器上的PG进行利用,同时我还通过pycharm远程连接了服务器,在步调中利用psycopg2进行连接时,利用的用户名也是超等用户,纵然pycharm已经断开连接,还是会造成服务器实例的占用。
可以通过查看设定的集群路径下,是否含有postmaster.pid来确定。将其删去即可。

  1. rm -r postmaster.pid
复制代码
2.2. 端口被占用

(1) 报错信息

waiting for server to start....2024-07-13 22:57:20.255 CST [29825] LOG:  starting PostgreSQL 15.4 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, 64-bit
2024-07-13 22:57:20.255 CST [29825] LOG:  could not bind IPv4 address "127.0.0.1": 地点已在利用
2024-07-13 22:57:20.255 CST [29825] HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2024-07-13 22:57:20.255 CST [29825] WARNING:  could not create listen socket for "localhost"
2024-07-13 22:57:20.255 CST [29825] FATAL:  could not create any TCP/IP sockets
2024-07-13 22:57:20.257 CST [29825] LOG:  database system is shut down
 stopped waiting
pg_ctl: could not start server
Examine the log output.
(2) 缘故原由分析与办理

由于在利用过程中,我同时在Pycharm上远程连接PostgreSQL,在代码运行后端口没有被释放,从而造成端口的占用
  1. sudo netstat -nplt // 查看特定端口是否被占用
  2. kill -9 pid_num // 要删除特定端口并查看
复制代码

假如显示不允许该利用,可以切换到root用户下再试一次

附录

数据库集群(Database Cluster)是由单个PostgreSQL服务器管理的数据库集合。PostgreSQL服务器运行在单个主机上,并管理单个数据库集群。
数据库(Database)是数据库对象的集合。在关系数据库理论中,数据库对象是用来存储或引用数据的数据结构。堆表就是一个典型的例子,还有许多类似于索引(index)、序列(sequence)、视图(view)、函数(function)等。在PostgreSQL中,数据库本身也是数据库对象,而且在逻辑上相互分离。所有其他数据库对象(例如表、索引等)都属于它们各自的数据库,虽然它们隶属于同一个数据库集群,但无法直接从集群中的一个数据库访问该集群中的另一个数据库中的对象






免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

三尺非寒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表