安装 Postgresql
安装
Ubuntu
将最新版本的 PostgreSQL 添加到软件源中:
# Create the file repository configuration:
sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# Import the repository signing key:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
# Update the package lists:
sudo apt-get update
安装最新版本的 PostgreSQL(截至 2024-04-16,版本是 16):
# Install the latest version of PostgreSQL.
# If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
sudo apt-get -y install postgresql
See: Linux downloads (Ubuntu)
Install and configure PostgreSQL
Apt - PostgreSQL wiki
为了让 pg_ctl
等命令可用,在 .zshrc
添加以下内容:
export PATH=/usr/lib/postgresql/16/bin:$PATH
postgresql - pg_ctl: command not found, what package has this command? - Ask Ubuntu
Windows
点击、下载并安装:
假设 postgresql 安装路径为 D:\postgresql\16
,那么需要将 D:\postgresql\16\bin
加到系统环境变量 Path
中。
See: PostgreSQL: Windows installers
Download PostgreSQL: Open source PostgreSQL packages and installers from EDB
可能的问题
可能会在安装过程中弹出下面的问题:
Problem running post-install step. Installation may not complete correctly. The database cluster initialisation failed.
这个一般是因为安装时语言选项选成了 "Chinese",而一些环境不支持 "GBK" 编码。
所以需要手动初始化数据库:
initdb -D "E:\postgresql\16\data" -U postgres
See: postgres installation the database cluster initialization failed ( Postgresql Version 9.4.4 ) - Stack Overflow
然后启动数据库:
pg_ctl -D "E:\postgresql\16\data" -l logfile -o "-p 15432" start
查看状态:
pg_ctl -D "E:\postgresql\16\data" status
以 postgres
用户登录 psql:
psql --host=127.0.0.1 --port=15432 -U postgres
卸载
查看已安装的版本:
ls /usr/lib/postgresql/
输出形如:
14/ 16/
然后删除指定版本:
sudo apt-get autoremove postgresql-14
指定数据目录
See: How To Move a PostgreSQL Data Directory to a New Location on Ubuntu 20.04 | DigitalOcean
How to change PostgreSQL’s data directory on Linux | fitodic’s blog
permissions - Changing Ownership: "Operation not permitted" - even as root! - Ask Ubuntu
查看数据目录
sudo -u postgres psql -c "SHOW data_directory;"
输出形如:
data_directory
-----------------------------
/var/lib/postgresql/16/main
(1 row)
停止服务
sudo systemctl stop postgresql
创建并复制新数据目录
假设新的数据目录为 /media/data1/postgresql/16/main
。
那么创建目录,并赋予 postgres
用户权限:
sudo mkdir -p /media/data1/postgresql/16/main
sudo chown -R postgres:postgres /media/data1/postgresql/16/main
# sudo chown -R postgres:postgres /media/data1/postgresql/16/main
如果 chown
遇到权限问题,并且 sudo chattr -i file
出现 Operation not supported
的问题,那么原因出在分区类型是 ntfs
或 fat32
。推荐的解决方案是重新格式化分区为 ext4
。
See: permissions - Changing Ownership: "Operation not permitted" - even as root! - Ask Ubuntu
permissions - How do I use 'chmod' on an NTFS (or FAT32) partition? - Ask Ubuntu
复制数据目录:
sudo rsync -av /var/lib/postgresql/16/main/ /media/data1/postgresql/16/main
注意 rsync 的语法 rsync -a src/ dest
,src
后面的 /
不要漏掉,否则会在 dest
下重复创建一个 src
目录。
See: How to rsync a directory to a new directory with different name? - Unix & Linux Stack Exchange
sudo mv /var/lib/postgresql/16/main /var/lib/postgresql/16/main.bak
# # move back
# sudo mv /var/lib/postgresql/16/main.bak /var/lib/postgresql/16/main
修改 postgresql 配置
配置文件位于 <data_directory>/postgresql.conf
:
sudo nano /etc/postgresql/16/main/postgresql.conf
# code /etc/postgresql/16/main/postgresql.conf
注释掉原来的数据目录,改成新的数据目录:
# data_directory = '/var/lib/postgresql/16/main' # use data in another directory
data_directory = '/media/data1/postgresql/16/main' # use data in another directory
修改 systemd 配置
修改 /lib/systemd/system/postgresql.service
:
sudo nano /lib/systemd/system/postgresql.service
# code /lib/systemd/system/postgresql.service
添加内容:
[Service]
...
Environment=PGDATA=/media/data1/postgresql/16/main
重新加载 systemd 配置:
sudo systemctl daemon-reload
重启服务
sudo systemctl restart postgresql
查看服务状态:
sudo systemctl status postgresql
查看数据目录是否正确:
sudo -u postgres psql -c "SHOW data_directory;"
输出形如:
data_directory
---------------------------------
/media/data1/postgresql/16/main
(1 row)
常见问题
可能遇到无法正常启动的问题,一般可能是:
systemd
的Environment
没有配置好,建议重新配置和重启systemd
(见上)。- 重启
postgresql
服务时,没有正确停止服务,可以尝试sudo systemctl stop postgresql
后再重启。 - 硬盘没有正确配置好,可以尝试重启系统,并重新格式化硬盘。
See: Can not connect to PostgreSQL listening on port 5432 - Ask Ubuntu
查看监听端口和配置文件
查看正在监听的端口:
netstat -nlt
查看配置文件路径:
sudo -u postgres psql -c "SHOW config_file;"
输出形如:
config_file
-----------------------------------------
/etc/postgresql/16/main/postgresql.conf
(1 row)
允许远程访问 postgresql
修改配置文件 /etc/postgresql/16/main/postgresql.conf
:
listen_addresses = '*'
注意这里是 '*'
而不是 "*"
。
然后(这里需要 root 权限才能打开):
sudo nano /etc/postgresql/16/main/pg_hba.conf`
添加:
host all all 0.0.0.0/0 md5
host all all ::/0 md5
重启服务:
sudo systemctl restart postgresql
See:
安装 pgvector
sudo apt install postgresql-server-dev-16
export PG_CONFIG=/Library/PostgreSQL/16/bin/pg_config
git clone --branch v0.6.2 https://githubfast.com/pgvector/pgvector.git
cd pgvector
sudo make
sudo make install
See: Open-source vector similarity search for Postgres