在我的Windows 10机器上安装了最新版本的PostgreSQL。创建此SQL查询以将数据从csv复制到表:
COPY schema.table(column1, column2)
FROM 'C:UsersUserDesktopcyrillic namecyrillic name.csv'
DELIMITER ',';
在DataGrip中执行,得到了这个:
[58P01] ERROR: could not open file "C:UsersUserDesktopcyrillic namecyrillic name.csv" for reading: No such file or directory
同时,如果我把这个文件放在"C:\Users\Public\Postgres\English-name.csv"中,那么一切都会运行得很好。网络服务完全控制cyrillic目录和文件(当文件在我的桌面文件夹(C:\Users\User\desktop(中的全英文路径下时,我得到"拒绝权限"后更改了它(。找到了这个答案,并决定在psql:中使用\copy
postgres-# cmd.exe /c chcp 1252
postgres-# COPY schema.table(column1, column2) FROM 'C:UsersUserDesktopcyrillic namecyrillic name.csv' DELIMITER ',';
但它不起作用,还尝试了其他编码——它总是返回相同的结果:
C:/Users/User/Desktop/some weird symbolic mess/some weird symbolic mess.csv: No such file or directory
这肯定是Windows编码的一些奇怪问题,有没有办法解决这个问题,或者解决这个问题的唯一方法是将文件路径重命名为全英文?
对不起,我认为你的问题没有解决方案。COPY
语句中的路径始终在数据库编码中,如果操作系统使用不同的编码,则表示您运气不佳。
您本可以使用与操作系统相同的编码创建数据库,但UTF-8以外的任何其他编码都是一个糟糕的选择。也许您应该切换到一个已经进入21世纪并支持UTF-8的操作系统。