用户

 
- 在 PostgreSQL 里创建一个新用户(角色);
- 在该用户下创建一张表;
- 用新用户身份登录并插入/查询数据。
- 所有命令在 Ubuntu + PG 17 下测试通过,其他版本同样适用。
    
  

准备:用超级用户(postgres)登录

 
```
# 切换到操作系统用户 postgres
sudo -iu postgres

# 用 psql 连到默认库 postgres
psql
```
```
postgres@ii:/ai/app/pg/data$ psql
psql (17.6)
Type "help" for help.

postgres=#
```
  

创建新用户(角色)并设密码

 
```
-- 创建登录角色,用户名为 demo_user,密码 123456
CREATE ROLE tpf LOGIN PASSWORD 'Book_1234';

-- 为其创建一个同名数据库(方便后续连接)
CREATE DATABASE db1 OWNER tpf;

-- 赋予该用户在自有数据库里创建对象的权限
GRANT CREATE ON SCHEMA public TO tpf;
```
  

退出超级用户,改用新用户登录

 
```
# 退出 psql
\q

# 用新用户身份连接到自己的库
psql -U tpf -d db1 -h 127.0.0.1 -W
```
  
我来帮你创建这个 PostgreSQL 用户并配置远程访问权限。 ## 1. 创建用户和数据库 ```sql -- 创建用户 tpf,密码为 Book_1234 CREATE USER tpf WITH PASSWORD 'Book_1234'; -- 创建数据库 db1 CREATE DATABASE db1; -- 将数据库所有权授予 tpf(可选,根据需要) GRANT ALL PRIVILEGES ON DATABASE db1 TO tpf; ``` ## 2. 配置 PostgreSQL 允许所有 IP 访问 需要修改两个配置文件: ### 2.1 修改 `postgresql.conf` 找到并修改监听地址: ```bash # 文件位置(根据你的系统可能不同): # Linux: /etc/postgresql/版本号/main/postgresql.conf # 或 /var/lib/pgsql/data/postgresql.conf listen_addresses = '*' # 将原来的 localhost 改为 *,表示监听所有IP ``` ### 2.2 修改 `pg_hba.conf` 添加允许所有 IP 访问的规则: ```bash # 文件位置(与 postgresql.conf 同目录) # 在文件末尾添加: # IPv4 所有IP允许连接 host all all 0.0.0.0/0 md5 # IPv6 所有IP允许连接(如需要) host all all ::/0 md5 ``` ## 3. 重启 PostgreSQL 服务 ```bash # Linux 系统 sudo systemctl restart postgresql # 或 sudo service postgresql restart ``` ## 4. 验证连接 使用你的 Go 代码连接: ```go db, err = sql.Open("postgres", "host=127.0.0.1 port=5432 user=tpf password=Book_1234 dbname=db1 sslmode=disable") ``` --- ## ⚠️ 安全提示 `0.0.0.0/0` 表示允许**任何 IP** 连接,这在生产环境中存在安全风险。建议: | 场景 | 推荐配置 | |------|---------| | 本地开发 | `host all all 127.0.0.1/32 md5` | | 指定网段 | `host all all 192.168.1.0/24 md5` | | 生产环境 | 使用防火墙 + VPN,或限制特定 IP | 如需更严格的权限控制,可以指定仅允许 `tpf` 用户访问 `db1` 数据库: ```bash host db1 tpf 0.0.0.0/0 md5 ```

 


 


 


ubuntu安装

 
https://ftp.postgresql.org/pub/source/

https://ftp.postgresql.org/pub/source/v17.6/postgresql-17.6.tar.gz

    

准备

 
```
sudo apt update
sudo apt install bison flex libreadline-dev
```

```
sudo su - root 
mkdir -p /ai/app/pg/ 
rsync -rltDv /mnt/g/soft/pub_source_v17.6_postgresql-17.6.tar.gz /ai/app/pg/
adduser postgres
chown -R postgres /ai/app/pg/ 
su -  postgres
cd /ai/app/pg/

mkdir -p /ai/app/pg/data
mkdir -p /ai/app/pg/walback

PGHOME=/ai/app/pg
PGDATA=$PGHOME/data
ARCLOG_PATH=$PGHOME/walback
PATH=$PGHOME/bin:$PATH
export PGHOME PGDATA ARCLOG_PATH PATH
```
    

安装

 
postgres@ii:/ai/app/pg$ tar -xvf pub_source_v17.6_postgresql-17.6.tar.gz
    
```
cd postgresql-17.6/
./configure --prefix=/ai/app/pg
make
make install
```

初始化及启动

 
```
initdb
pg_ctl -D /ai/app/pg/data -l logfile start

pg_ctl start
psql -U postgres

postgres=# \password
Enter new password for user "postgres":Book_1234
Enter it again:
postgres-# \q
```
    

postgresql.conf配置文件

 
- 修改data目录下的pg_hba.conf配置文件,将IPv4 local connections下面的一行改为如下所示:
```
cd /ai/app/pg/data
vim postgresql.conf
listen_addresses='*' 
port = 5432 
max_connections = 30
```

重启PostgreSQL服务:

 
pg_ctl restart
pg_ctl stop
pg_ctl start
    

监听

 
```
postgres@ii:/ai/app/pg/data$ netstat -tunlp|grep 5432
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      12954/postgres
tcp6       0      0 :::5432                 :::*                    LISTEN      12954/postgres
```
    

 

    

 

    

 


 

  

 


参考