通过使用从stdin复制将bytea数据导入PostgreSQL
我通过一个外部程序生成了一个(UTF-8)文件,用于导入PostgreSQL 9.6.1。问题在于通过使用从stdin复制将bytea数据导入PostgreSQL,postgresql,csv,import,Postgresql,Csv,Import,我通过一个外部程序生成了一个(UTF-8)文件,用于导入PostgreSQL 9.6.1。问题在于bytea字段(PWHASH) 此文件中的代码段(使用制表符作为分隔符) 使用导入时 psql mydb myrole -f test.sql 一切顺利 但是,如果我查询结果,字节数组不是16字节,而是37字节: select passwordhash,length(passwordhash) from users; passwor
bytea
字段(PWHASH)
此文件中的代码段(使用制表符作为分隔符)
使用导入时
psql mydb myrole -f test.sql
一切顺利
但是,如果我查询结果,字节数组不是16字节,而是37字节:
select passwordhash,length(passwordhash) from users;
passwordhash | length
------------------------------------------------------------------------------+--------
\x45275c78363537423935344432374234414335364641393937443234413546463235363327 | 37
正确的语法是什么?我必须“准备”我相信的数据。我喜欢这里:
t=# insert into u select 'x657B954D27B4AC56FA997D24A5FF2563';
INSERT 0 1
Time: 5990.809 ms
t=# select b from u;
b
----------------------------------------------------------------------
\x783635374239353444323742344143353646413939374432344135464632353633
(1 row)
Time: 0.234 ms
t=# insert into u select decode('657B954D27B4AC56FA997D24A5FF2563','hex');
INSERT 0 1
Time: 62.767 ms
t=# select b from u;
b
----------------------------------------------------------------------
\x783635374239353444323742344143353646413939374432344135464632353633
\x657b954d27b4ac56fa997d24a5ff2563
(2 rows)
Time: 0.208 ms
因此,在您的情况下,您可以:
将表t创建为select ID、code、PWHASH::text、来自用户的电子邮件,其中false代码>
从stdin复制t(ID、code、PWHASH、EMAIL)代码>
插入用户选择ID、code、decode(substr(PWHASH,4)、'hex')、来自t的电子邮件代码>
输入文件的格式错误。应该是这样的:
7 test1 \\x657B954D27B4AC56FA997D24A5FF2563 test@amce.org
是的,我知道。但这不能用在我的用例中,不是吗?谢谢!但是,文档中提到的语法在哪里?我真的花了一些时间来寻找它:(我通过创建一个带有
COPY…TO
的文件找到了它。是的。就是这样做的!再次尝试。
7 test1 \\x657B954D27B4AC56FA997D24A5FF2563 test@amce.org