ner*_*tor 20 csv postgresql import tsv psql
我正在尝试将一个(相当大的).txt文件导入PostgreSQL 9.1中的表格地名.我在我的服务器的/〜目录中,在该目录中放置了一个名为US.txt的文件.我将search_path变量设置为geochat,我正在使用的数据库的名称.然后我输入此查询:
COPY geonames
FROM 'US.txt',
DELIMITER E'\t',
NULL 'NULL');
Run Code Online (Sandbox Code Playgroud)
然后我收到此错误:
ERROR: could not open file "US.txt" for reading: No such file or directory.
Run Code Online (Sandbox Code Playgroud)
我是否必须首先输入\i US.txt或类似的东西,或者它应该从当前的工作目录中获取它?
Erw*_*ter 15
一些误解:
1.
我在我服务器的/〜目录中
没有目录/~.它是/(根目录)或~(当前用户的主目录).这也与问题无关.
2.
我将search_path变量设置为geochat,即我正在使用的数据库的名称
这search_path与数据库的名称无关.它适用于当前数据库中的模式.您可能需要重置此项.
3.
您需要使用文件的绝对路径.如本手册中所述:
filename输入或输出文件的绝对路径名.
4.
DELIMITER:只是噪音.
默认值为文本格式的制表符
5.
NULL:将实际字符串'NULL'用于NULL值是相当罕见的.你确定吗?
默认值为
\N(反斜杠-N)文本格式,以及CSV格式的未加引号的空字符串.
我的猜测(重置后search_path- 或者您对表名进行模式限定):
COPY geonames FROM '/path/to/file/US.txt';
Run Code Online (Sandbox Code Playgroud)
小智 5
路径相对于 PostgreSQL 服务器,而不是psql客户端。
假设你正在运行的PostgreSQL 9.4,你可以把US.txt目录/var/lib/postgresql/9.4/main/。
另一种选择是从标准输入通过管道输入:
cat US.txt | psql -c "copy geonames from STDIN WITH (FORMAT csv);"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24236 次 |
| 最近记录: |