【发布时间】:2014-02-06 11:22:59
【问题描述】:
数据库:Postgres 9.1
我有一个名为 logos 的表,定义如下:
create type image_type as enum ('png');
create table logos (
id UUID primary key,
bytes bytea not null,
type image_type not null,
created timestamp with time zone default current_timestamp not null
);
create index logo_id_idx on logos(id);
我希望能够通过 2 种方式将记录插入到此表中。
在表格中插入行的第一种(也是最常见的)方式是用户将通过 html 文件上传表单提供 PNG 图像文件。在服务器上处理请求的代码将接收一个包含 PNG 图像文件中数据的字节数组,并使用与 here 解释的内容非常相似的东西在表中插入一条记录。互联网上有很多关于如何将字节数组插入到 bytea 类型的 postgresql 字段的示例。这是一个简单的练习。插入代码的示例如下所示:
insert into logos (id, bytes, type, created) values (?, ?, ?, now())
并且字节将设置为:
...
byte[] bytes = ... // read PNG file into a byte array.
...
ps.setBytes(2, bytes);
...
第二种方式在表格中插入行将来自纯文本文件脚本。需要这样做的原因只是为了将测试数据填充到表中以进行自动化测试,或者使用一些记录来初始化数据库以用于远程开发环境。
无论数据如何输入到表格中,应用程序显然需要能够从表格中选择 bytea 数据并将其转换回 PNG 图像。
问题
如何正确编码字节数组,以便能够从脚本中插入数据,从而只有文件中包含的原始字节存储在数据库中?
我可以编写代码来读取文件并输出插入语句来填充脚本。但我不知道如何对纯文本脚本的字节数组进行编码,这样当从 psql 运行脚本时,图像数据将与使用 setBytes jdbc 代码插入文件时相同。
我想用这样的方式运行脚本:
psql -U username -d dataBase -a -f test_data.sql
【问题讨论】:
标签: postgresql character-encoding