Windows系统下PostgreSQL 11外部驱动器(USB)表空间创建方法及创建数据库报错XX000解决方案
在Windows系统的USB驱动器上用PostgreSQL 11表空间:可行吗?怎么操作?还有那个报错咋解决?
一、能不能在USB上建PostgreSQL 11的表空间?
当然可以!不过得先满足两个关键条件:
- 你的USB得用PostgreSQL支持的文件系统,强烈推荐NTFS——FAT32有单文件4GB的限制,存数据库很容易踩坑;
- 运行PostgreSQL服务的账户(默认是
NT SERVICE\PostgreSQL)必须能读写USB上的目标目录,权限不够肯定搞不定。
二、具体操作步骤
咱们一步步来:
在USB上建个专用目录
比如你的USB盘符是E:,直接建个像E:\pg_tblspc_usb的目录——别用中文或特殊字符,不然容易出编码或路径解析问题。给目录加权限
这步很容易忘,也是很多人踩坑的地方:- 右键目录 → 「属性」→ 「安全」选项卡 → 「编辑」→ 「添加」;
- 在输入框里敲
NT SERVICE\PostgreSQL(如果你改了服务账户,就输对应的名字),点「检查名称」确认后添加; - 给这个账户开完全控制权限(至少得有读取、写入、修改权限),然后一路确定保存。
登录PostgreSQL创建表空间
用psql或者pgAdmin连上数据库,执行这条SQL:CREATE TABLESPACE usb_tblspc LOCATION 'E:/pg_tblspc_usb';划重点:路径要用斜杠
/或者双反斜杠\\,单反斜杠\会被当成转义字符,绝对不能用!验证一下
跑这条命令看看表空间有没有建好:SELECT spcname, spclocation FROM pg_tablespace;要是能看到
usb_tblspc和对应的路径,就说明成了。
三、解决创建数据库时的那个报错:ERROR: could not create directory "pg_tblspc/30222/PG_11_201809051/18650": Invalid argument
遇到这个错误别慌,大概率是这几个原因,挨个排查:
1. 路径格式错了(最常见)
刚才强调过的,Windows下PostgreSQL不认单斜杠\,要是你创建表空间时用了E:\pg_tblspc_usb这种格式,肯定会崩。
- 解决方法:删掉旧表空间(先把依赖它的数据库或对象清掉),用正确路径重建:
DROP TABLESPACE usb_tblspc; CREATE TABLESPACE usb_tblspc LOCATION 'E:/pg_tblspc_usb';
2. USB用了FAT32格式
FAT32不仅有单文件4GB限制,对目录权限和嵌套创建的支持也不如NTFS,很可能导致PostgreSQL建子目录失败。
- 解决方法:备份USB里的所有数据,然后把它格式化成NTFS,再重新建表空间。
3. PostgreSQL服务账户权限不够
就算你建了目录,要是服务账户没权限读写,照样创建不了子目录。
- 解决方法:回到步骤2,重新给
NT SERVICE\PostgreSQL账户开完全控制权限,确保权限生效后再试。
4. USB盘符变了
要是你建完表空间后拔过USB,盘符可能从E:变成F:,PostgreSQL自然找不到原来的路径了。
- 解决方法:先确认USB现在的盘符,然后删掉旧表空间,用新盘符重建(记得先迁走依赖的数据库)。
5. 路径太长或有特殊字符
Windows默认路径长度限制是260字符,要是你的目录路径太长,或者包含中文、空格、特殊符号,也会触发这个错误。
- 解决方法:在USB根目录建个短路径的目录,比如
E:\pg_tblspc,然后用这个路径重建表空间。
内容的提问来源于stack exchange,提问作者Yetendra Shakya
相关产品推荐
相关产品推荐

