Debian系统下PostgreSQL使用教程汇总
sudo apt update && sudo apt upgrade -y确保系统包为最新版本。sudo apt install postgresql postgresql-contrib,其中postgresql-contrib包含常用工具(如pg_dump、pg_restore)。pg_lsclusters查看数据库集群状态,或systemctl status postgresql检查服务是否运行。/etc/apt/sources.list.d/pgdg.list文件,写入deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main($(lsb_release -cs)自动匹配Debian版本,如bookworm)。wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -添加官方密钥。sudo apt install postgresql-14(替换为所需版本号,如13、15)。PostgreSQL安装后会创建同名系统用户postgres,用于管理数据库。通过sudo -i -u postgres切换至该用户。
默认情况下,postgres用户无密码或密码为空。切换至postgres用户后,运行psql进入交互终端,执行\password postgres设置密码。
CREATE USER myuser WITH ENCRYPTED PASSWORD 'mypassword';CREATE DATABASE mydb OWNER myuser;GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;\q。sudo -u postgres createuser --superuser myuser(--superuser表示超级用户,可根据需求省略);sudo -u postgres createdb -O myuser mydb(-O指定所有者);sudo -u postgres psql -c "\password myuser"。/etc/postgresql/<version>/main/postgresql.conf,找到listen_addresses并设置为'*'(允许所有IP连接)或指定IP(如'192.168.1.100')。/etc/postgresql/<version>/main/pg_hba.conf,在文件末尾添加host all all 0.0.0.0/0 scram-sha-256(允许所有IP通过scram-sha-256加密密码访问,生产环境建议限制为特定网段,如192.168.1.0/24)。sudo systemctl restart postgresql使配置生效。ufw,运行sudo ufw allow 5432/tcp允许PostgreSQL端口(默认5432)的流量。postgres用户登录:sudo -u postgres psql;psql -U myuser -d mydb -h 127.0.0.1 -p 5432(-U指定用户,-d指定数据库,-h指定服务器IP,-p指定端口)。\q或按Ctrl+D。\l(或SELECT datname FROM pg_database;)。\c mydb(切换至mydb数据库)。SELECT current_database();。SELECT current_user;。CREATE TABLE users (id SERIAL PRIMARY KEY, name VARCHAR(100), email VARCHAR(100));(SERIAL为自增主键)。INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');。SELECT * FROM users;。\q。sudo -u postgres pg_dump mydb > mydb_backup.sql(将mydb数据库导出至mydb_backup.sql文件)。sudo -u postgres psql mydb < mydb_backup.sql(将mydb_backup.sql文件导入至mydb数据库)。GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;。GRANT SELECT, INSERT, UPDATE ON TABLE mytable TO myuser;(允许用户myuser对mytable进行查询、插入、更新操作)。REVOKE ALL PRIVILEGES ON DATABASE mydb FROM myuser;(撤销用户myuser对mydb的所有权限)。