Jul 29

关于在winxp下的enterprisedb建表空间的问题

admin , 14:57 , 数据库 » 数据库(EnterpriseDb) , 评论(0) , 引用(0) , 阅读(1679) , Via 本站原创 | |
搜索
我已经获得阿里云幸运券,准备分享给您。请点击获取  

ERROR: could not set junction for "\??\C:\data1": Incorrect function. 软硬链接
关于在winxp下的pgsql(v8.2.4)建标空间的问题
Windows用户使用表空间还有一个需要注意的细节是:
PostgreSQL表空间的实质是数据库簇中的pg_tblspc目录建立的目录符号连接。
因此必须在支持符号连接的文件系统才能使用表空间。
说得更直白些就是在Windows你的数据库簇必须位于NTFS文件系统而不是FAT32,才能建立表空间。

Windows 下创建硬链接,只能适用于 NTFS 文件系统。

Windows 下创建软链接,NTFS 只支持对目录的软链接,微软把它称作 junction。

#C盘为NTFS,D盘为FAT32
#数据库簇位于FAT32,试图建立NTFS上的表空间。
postgres=# CREATE TABLESPACE space1 LOCATION 'C:/data1';
ERROR: could not set junction for "\??\C:\data1": Incorrect function.
#数据库簇位于FAT32,试图建立FAT32上的表空间。
postgres=# CREATE TABLESPACE space2 LOCATION 'D:/data2';
ERROR: could not set junction for "\??\D:\data2": Incorrect function.

#数据库簇位于NTFS,试图建立NTFS上的表空间。
postgres=# CREATE TABLESPACE space1 LOCATION 'C:/data1';
CREATE TABLESPACE
#将目录分隔符误写为“\”
postgres=# CREATE TABLESPACE space2 LOCATION 'D:\data2';
WARNING: nonstandard use of escape in a string literal
LINE 1: CREATE TABLESPACE space2 LOCATION 'D:\data2';
^
提示: Use the escape string syntax for escapes, e.g., E'\r\n'.
ERROR: tablespace location must be an absolute path
#数据库簇位于NTFS,试图建立FAT32上的表空间。
postgres=# CREATE TABLESPACE space2 LOCATION 'D:/data2';
CREATE TABLESPACE

参见:
http://www.pgsqldb.org/bin/view/PgSQL/PgsqlOnWinFAQ
1.2) 是否支持在Windows NT4的平台下运行?
http://www.pgsqldb.org/pgsqldoc-8.1c/sql-createtablespace.html
只有在那些支持符号连接的系统上才支持表空间。

 

当你建立成功表空间后,你会发现pg_tblspc里的某个子目录实际是你所指定的实际目录的映射(连接),
你对那个子目录所作更改会反映到实际目录,对实际目录的更改也会反映到该子目录。

 

来源:http://bbs.pgsqldb.com/index.php?t=msg&th=10121