前情提要:Ubuntu20.04
安装postpresql
sudo apt update
sudo apt-get install postgresql -y
自动安装匹配版本,我安装的是 PostgreSQL12
运行并且查看状态
sudo systemctl start postgresql
sudo systemctl status postgresql
psql shell
参考网站
创建postgres user
sudo -i passwd postgres
切换用户
su - postgres
在postgres用户下:键入下面命令,即可进入psql
psql
修改数据文件路径
参考网站
好的我们现在在psql shell下:键入“SHOW data_directory;”,如下
postgres=# SHOW data_directory;
data_directory
-----------------------------
/var/lib/postgresql/12/main
(1 row)
可以看到这是目前的postgresql 数据的存放路径,记录下来
接着可以退出psql shell了:
postgres=# \q
也退出postgres 用户
接着可以查看一下上面找到的文件路径是否存在,确认存在之后
利用root用户结束 postgresql
sudo systemctl stop postgresql
sudo rsync -av /var/lib/postgresql/12/main /newdisk/pgdata
很重要的一步!!!
切换文件及的拥有者为postgres,并且更改父文件夹的权限!!
sudo chown postgres:postgres /newdisk/pgdata
cd ../
sudo chmod 755 .
在切换到postgres用户
su - postgres
尝试一下能不能进入到自己想要设置的文件夹
cd /newdisk/pgdata
确定能进入之后
确认一下自己的initdb文件在哪个文件夹,然后做以下操作:
/usr/lib/postgresql/12/bin/initdb -D /newdisk/pgdata
成功如下:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locales
COLLATE: en_CA.UTF-8
CTYPE: en_CA.UTF-8
MESSAGES: en_CA.UTF-8
MONETARY: zh_CN.UTF-8
NUMERIC: zh_CN.UTF-8
TIME: zh_CN.UTF-8
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /home/llxy/bigdisk/pgdata ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Asia/Shanghai
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/usr/lib/postgresql/12/bin/pg_ctl -D /home/llxy/bigdisk/pgdata -l logfile start
最后按照最后一句执行就行。
ps
插一句,因为我本意是要将整个数据文件夹放在一块外界的移动硬盘上,我没有办法更改移动硬盘的拥有者和权限,因为会影响硬盘上的很多数据,所以在我进行最后一步 logfile start时,被告知“permission denied”
无法更改硬盘的权限的情况下,我在本机电脑下创建了一个文件夹pg,将最后一句“
usr/lib/postgresql/12/bin/pg_ctl -D /home/llxy/bigdisk/pgdata -l logfile start”写入sh文件,并且把改sh文件放在pg文件夹下,
(最重要的一步)
更改文件夹和文件夹内文件的拥有者
首先退出postgres用户,然后如下:
mkdir pg
cp /..somewhere../pg.sh pg/pg.sh
sudo chown postgres pg pg/*
再次进入postgres用户
su - postgres
cd pg
sh pg.sh
终于成功啦,也就是说logfile将会被写进本地,不过我不在意logfile会在哪里