可以在PostgreSQL的表中存储像HTML页面,图像,PDF等文件,或者它很慢?我读了一些文章说这不推荐,但我不知道是否属实.
什么是更好的使用,存储为BLOB(它存储在文件中,对吗?)或存储bytea类型?
在Postgres中有一个名为的数据类型 bytea
Postgres文档就在这里: http://www.postgresql.org/docs/9.0/static/datatype-binary.html
我无法理解何时使用它 - 我也不能真正理解这种数据类型的用途.
我已经多次遇到过这个术语bytea并开始怀疑自己"看起来他们希望我理解这一点......也许我应该知道它是什么."
如果有人可以给出一个简单的定义,并给出一些我可能会使用它的情况,这将是非常有用的.
谢谢.
出于学习目的,我正在使用Python + Flask创建一个站点.我想从数据库中恢复图像并在屏幕上显示.但是一步一步.
我不知道如何在我的数据库中保存图像.我的搜索只显示我必须bytea在我的数据库中使用一个类型.然后我得到我的图像,并以某种方式(?)将其转换为字节数组(bytea ==数组的咬?)并以某种方式(?)在插入命令中使用此数组.
我能够发现(也许)如何在Java(这里)和C#(这里)中做到这一点,但我真的想使用Python,至少现在.
有人能帮我吗?
这个网站有很多这类问题.但大多数(很容易超过85%)的回复是"您不应该在数据库中保存图像,它们属于fs"并且无法回答问题.其余的并没有完全解决我的问题.因此,如果副本有这样的答案,请不要将其标记为重复.
我们的一个软件项目使用PostgreSQL表,其中列为'guid',类型为bytea.
这与hibernate 3.3.2.GA和PostgreSQL 8.4一起使用,它使用java对象序列化来序列化java UUID类型.结果是一个类似于以下escape格式的字节bytea文字:
'\254\355\000\005sr\000\016java.util.UUID\274\231\003\367\230m\205/\002\000\002??J\000\014leastSigBitsJ\000\013mostSigBitsxp\273\222)\360*r\322\262u\274\310\020\3??42\004M '
Run Code Online (Sandbox Code Playgroud)
...我们不能轻易地在查询中使用select或条件来检索相关行.
有没有人有办法在查询的select-或where-parts中读取或使用bytea-column(例如通过psql或pgadmin3),而无需设置一些hibernate-query?
我使用PHP将图像存储在具有列类型bytea的PostgreSQL数据库中.问题是每次我尝试在浏览器中加载图像时都不会出现.Firefox开发人员控制台表示图像被截断或损坏.
PHP代码:
//code for inserting into the database
if(array_key_exists('submit_pic', $_POST)){
$user=$_SESSION['name'];
if(isset($_FILES['thumbnail'])&&$_FILES['thumbnail']['size']>0){
$fi = $_FILES['thumbnail']['tmp_name'];
$p=fopen($fi,'r');
$data=fread($p,filesize($fi));
$data=addslashes($data);
$dat= pg_escape_bytea($data);
$q="update userinfo set image='{$dat}' where email='$user'";
$e=pg_query($q)or die(pg_last_error());
// code for retreving from database
require_once('conn.php');
session_start();
$user=$_SESSION['name'];
pg_query('SET bytea_output = "escape";');
$lquery ="select image from userinfo where email='$user'";
$lq = pg_query($lquery)or die(pg_last_error());
$lqq=pg_fetch_row($lq,'image');
header("conent-type:image");
echo pg_unescape_bytea($lqq[0]);
Run Code Online (Sandbox Code Playgroud)
我需要将上传的图像存储在数据库中 - 我实际上正在使用heroku谢谢
我有PostgreSQL数据库,并且有一个数据类型为'bytea'的列'image'.我无法修改列或数据库配置.JPA带注释的POJO包含跟随映射
@Column(name="image")
private byte[] image;
Run Code Online (Sandbox Code Playgroud)
返回的数据采用以下格式(这只是一个示例)
WF5ClN6RlpLZ0hJTUdNQ1FJWmkwcFVGSUdNQ0lDWUE5TUEvanRFeElwK2x0M2tBQUFBQVNVVk9SSzVDWUlJPQo=
Run Code Online (Sandbox Code Playgroud)
当我将此数据写入文件(.jpeg)时,照片查看器会说"这是损坏的文件".我也理解实际的图像字节数据与上面的示例有所不同.我读了一些博客,提到PostgreSQL将十六进制转换应用于bytea数据.如何在有或没有JPA的情况下将其恢复为原始数据?
数据库 - PostgresSQL版本9.5.1
司机
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1205-jdbc41</version>
</dependency>
Run Code Online (Sandbox Code Playgroud) 我有一个数据库,其中一个表存储bytea从另一个系统收集的各种通用数据的blob().该bytea字段可以包含任何内容.为了解如何解释数据,该表还具有格式字段.我写了一个Java应用程序读取bytea从数据库的字段byte[],然后我可以很容易地将其转换为double[]或int[]或任何格式字段通过说ByteBuffer和各种视图(DoubleBuffer,IntBuffer,等).
现在,我需要在触发器函数中对数据库本身的数据进行一些操作,以便与另一个表保持完整性.我可以找到几乎任何可以想象的数据类型的转换,但我找不到任何从bytea(甚至bit)到double precision和返回的内容.A bytea可以被分解,转换为比特,然后转换为int或bigint,但不是a double precision.例如,x'deadbeefdeadbeef'::bit(64)::bigint将转换为-2401053088876216593没有问题,但x'deadbeefdeadbeef'::bit(64)::double precision失败的"错误:无法将类型位转换为双精度"而不是给出IEEE 754的答案-1.1885959257070704E148.
我找到了这个答案/sf/answers/816329461/,它基本上实现了IEEE标准将位转换为double,但是在PostgreSQL中真的没有基本的转换函数吗?另外,我需要向后退double precision,bytea当我完成操作数据并需要更新表时,这个答案没有提供.
有任何想法吗?
我有以下 SQL:
CREATE TABLE Documents (
Id INT NOT NULL,
UserId INT NOT NULL,
Label CHARACTER VARYING(220) NOT NULL,
Image BYTEA NOT NULL,
PRIMARY Key(Id),
FOREIGN KEY (UserId) REFERENCES Users(Id)
);
Run Code Online (Sandbox Code Playgroud)
我想知道,我应该如何将 Base64 图像插入表中。
Base64 字符串来自使用Node.js 上的fs模块获取图像后的 Buffer。
我正在尝试使用 Sequelize 的原始查询插入图像,但我还没有找到关于此的正确信息。
我需要解码一个 base64 字符串并获取一大块二进制文件。
Postgres 中是否有 SQL 函数可以简单地将 abytea转换为二进制字符串表示?
(例如“00010001010101010”。)
我有一个PostgreSQL表,我想将列从bigint一个bytea字节改为字节以保存更多数据.我在想使用以下顺序:
alter table mytable add new_columnupdate mytable set new_column = int8send(old_column)alter table drop old_columnalter table rename new_column to old_column上述序列的工作,唯一的问题是,我想在字节序列bytea被逆转.例如,如果一个值old_column是0x1234567890abcdef,上面的序列会产生\0224Vx\220\253\315\357,但我希望它是
\357\315\253\220xV4\022.似乎结果bytea使用了来自原始的big-endian命令bigint.
没有编写程序,有没有一种简单的方法可以做到这一点?我swap64()在PostgreSQL中寻找一种功能但却找不到它.
bytea ×10
postgresql ×10
java ×2
base64 ×1
binary-data ×1
blob ×1
database ×1
definition ×1
double ×1
endianness ×1
file ×1
heroku ×1
hibernate ×1
image ×1
jpa ×1
php ×1
python ×1
sequelize.js ×1
sql ×1
uuid ×1