持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天,点击查看活动详情
前言
之前用过 postgresql ,当时没注意碰到的一些问题,也没总结。
最近的一个项目又开始使用 postgresql 了。
安装使用碰到了几个懵圈的问题。
有几个问题也不是第一次碰到,但是之前没有记录下来解决方法,然后每次还要再去搜索。
还是及时记录一下,下次碰到时也能节省时间,提高效率。
问题及解决方法
-
备份的数据无法导入。
不知道是步骤不对还是什么原因,用 大象 备份的数据,然后再用 大象 的 恢复 ,却恢复不了。
找了半天也没到啥原因,也不知道该怎么操作。
有人说命令导入可行,最后只好用命令导入数据了。psql -U postgres -f dump.sql指定数据库使用下面的命令
psql -U postgres -d hello_db -f dump.sql -
提示 找不到 psql 命令。
用上面的命令试着导入数据,结果提示 找不到 psql 命令。
用的是 Mac ,找到的原因是 Mac 的环境变量中没有 postgresql 。
需要把 postgresql 的 bin 目录添加到环境变量中。
首先要确认 postgresql 的安装位置,一般是下面的位置。/Library/PostgreSQL/13可以跳转到该目录确认一下:
$ cd /Library/PostgreSQL/13不同的版本,后面的数据不同,13/14/15 这样。
修改 Mac 环境变量的方法,网上很好找。
添加的内容如下:export PATH="/Library/PostgreSQL/13/bin:$PATH"需要使环境变量生效后才能使用,生效的方法也很好找。
-
无法从另外一台终端连接 postgresql 。
网上的解决方案一大堆,都是修改安装目录下的 data/pg_hba.conf 的内容,添加上允许连接的 IP 。
允许所有 IP :
# IPv4 local connections: host all all 0.0.0.0/0 trust允许指定 IP :
# IPv4 local connections: host all all 192.168.9.12/32 trust不过修改这个文件时还是碰到了一个小问题,就是 Mac 下进入不到 data 目录里,用 sudo 也进不去,感觉很神奇。
只能在 postgresql 的安装路径下执行下面的命令直接打开
data/pg_hba.conf后再编辑。$ sudo vim data/pg_hba.conf -
Windows 上的 postgresql ,在
data/pg_hba.conf中添加上了允许连接的 IP 还是不能访问。这个问题整得都快崩溃了,总以为哪里设置得不对。
看了看 Windows 里的防火墙规则,也没有相关的设置。
但是想来想去只能是防火墙屏蔽了。
最后都快抓狂了,还是通过 添加防火墙规则 后解决的。
做法是允许连接 postgresql 的端口,一般是 5432 。 -
删除了表中的数据,占用的表空间却没有减少
查看表占用的空间大小:
select pg_size_pretty(pg_relation_size('表名'));释放多余的表空间:
vacuum FULL 表名;可再次执行上面的查看表占用空间的命令确认一下是否真正释放。
下面这个链接里有更详细的说明:
Postgresql中删除大量数据优化表空间_Hello Bug的博客-CSDN博客 -
函数 uuid_generate_v4() 不存在
错误信息:
bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR: function uuid_generate_v4() does not exist nested exception is org.postgresql.util.PSQLException: ERROR: function uuid_generate_v4() does not exist原因:
uuid_generate_v4() 是在 Postgresql 的扩展中,需要安装。
解决方案:
sql查询中执行
create extension pgcrypto;然后添加 uuid 扩展
create extension "uuid-ossp";添加完运行命令确认是否添加成功:
select uuid_generate_v4()全过程:
Server [localhost]: Database [postgres]: Port [5432]: Username [postgres]: psql (13.7) 输入 "help" 来获取帮助信息. postgres=# create extension pgcrypto; CREATE EXTENSION postgres=# create extension "uuid-ossp"; CREATE EXTENSION postgres=# select uuid_generate_v4(); uuid_generate_v4 -------------------------------------- 33780031-1cf3-49cb-80f4-e516a97a1b45 (1 行记录) postgres=#如果还提示不存在,则先删除掉已有的 'pgcrypto' 和 'uuid-ossp' 扩展后,再次添加即可。