我有一个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中寻找一种功能但却找不到它.
我的应用程序(在Delphi和ZEOS组件中开发)使用PostgreSQL 8.4并将一些缩略图存储到一bytea列中.
我想迁移到PostgreSQL 9.2并恢复转储,一切正常,除非我尝试检索这些图像:Postgres 9.2 hex用于输出表示而不是escape在Postgres 8.4 中使用.
有两种可能的解决方案:更改Postgres 9.2设置以进行escape表示,或hex通过应用程序更改二进制数据中的字符串.但什么是最好的解决方案?为什么PostgreSQL的9.X改变hex的bytea代表性?
这是一个简单的设置还是有技术原因?
我有字符串'test\data'或只有一个反斜杠符号'\'。
它如何转换为bytea?
我正在尝试将bytea列更改为具有类型oid并仍然保留值。
我尝试过使用类似的查询:
ALTER TABLE mytable ADD COLUMN mycol_tmp oid;
UPDATE mytable SET mycol_tmp = CAST(mycol as oid);
ALTER TABLE mytable DROP COLUMN mycol;
ALTER TABLE mytable RENAME mycol_tmp TO mycol;
Run Code Online (Sandbox Code Playgroud)
但这只是给我一个错误:
ERROR: cannot cast type bytea to oid
Run Code Online (Sandbox Code Playgroud)
有什么方法可以实现我想要的吗?
我是Java编程新手,我正在搜索Java代码以在PostgreSQL中存储图像并检索图像.
在PostgreSQL中,我使用了Bytea Data-type.图像已存储.但是当我检索时我得到了NULL.我无法得到图像.
对此或任何其他建议的任何示例都会有所帮助.
我有一个小脚本,我正在生成SHA1哈希,通过hashlib的hexdigest获取二进制表示,并将它们存储在带有bytea列的Postgres DB中.我在Postgres(缩写)中有一个看起来像这样的查询:
SELECT * FROM some_table WHERE some_hash in decode(another_hash, 'hex')
Run Code Online (Sandbox Code Playgroud)
执行查询时,我有一些代码如下:
cur.execute(query)
for hash_rep in cur:
print bhash
Run Code Online (Sandbox Code Playgroud)
现在,在该print语句中,它将打印出难以理解的字符,或者如果我将其更改为:
print str(psycopg2.Binary(bhash))
Run Code Online (Sandbox Code Playgroud)
我有类似的东西:
'\214p\203\030\017K\247\373o\253'::bytea
Run Code Online (Sandbox Code Playgroud)
将它转换回原始字符串的正确方法是什么?原始表示类似于"30d22d5d64efe4c5333e",我想将其恢复到原始字符串以进行比较.我不确定我是否遗漏了一些明显的东西,
PostgreSQL 有这种数据类型,称为bytea. 这是他们的blob版本。
在显示图像 png/jpg/gif 时,当前的趋势是使用Data URL。
我的问题是如何将 bytea 值转换为 Base64 数据 URL 值?
我已经知道如何在数据库中存储图像,只需bytea在我的表中使用类型
我已经可以通过我的项目 .net Core 中的代码将图像保存到数据库中,我刚刚获取图像url并像那里一样保存:
using (HttpResponseMessage res = await client.GetAsync(photo_url))
using (HttpContent content = res.Content) {
byte[] imageByte = await content.ReadAsByteArrayAsync();
using (NpgsqlConnection conn = new NpgsqlConnection("ConnectionString")) {
conn.Open();
using (NpgsqlTransaction tran = conn.BeginTransaction())
using (NpgsqlCommand cmd = new NpgsqlCommand("Photo_Save", conn)) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("photo", NpgsqlTypes.NpgsqlDbType.Bytea, imageByte);
cmd.ExecuteScalar();
tran.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
它运作良好
但我需要从我的电脑保存到表格图像
有没有什么方法可以在没有主机或任何其他项目的代码的情况下将图像上传到数据库中,只需使用本地图片并连接到Postges DB?
我正在尝试将UUID存储在 posts 表中(帖子 - 社交媒体之类的并不重要),并且我想知道哪种是在PostgreSQL中存储UUID的正确方法。我尝试将它们转换为字节并将它们存储到MySQL中的二进制(16)数据类型列中。但我在PostgreSQL中找不到类似的类型,例如binary (16) 我只找到了bytea。所以我需要一种有助于调整列大小的数据类型。有没有类似bytea var-sized 的东西?
我为Postgresql编写了自己的C函数,它有bytea参数.该功能定义如下
CREATE OR REPLACE FUNCTION putDoc(entity_type int, entity_id int,
doc_type text, doc_data bytea) RETURNS text
AS 'proj_pg', 'call_putDoc'
LANGUAGE C STRICT;
Run Code Online (Sandbox Code Playgroud)
我的函数call_putDoc写在C上,读取doc_data并将其数据传递给另一个函数,比如file_magic确定数据的mime类型,然后将数据传递给适当的文件转换器.
我从php脚本调用这个postgresql函数,它将文件内容加载到最后一个参数.所以,我应该传递文件内容pg_escape_bytea.
当数据传递给call_putDocC函数时,它的数据是否已经转义,如果没有 - 如何取消它们?
编辑:正如我发现的那样,没有,传递给C函数的数据未被转义.如何取消它?
在光滑的文档中,据说这java.sql.Blob是开箱即用的类型之一,我试图用它来表示bytea列.但是下面的代码给出了一个错误:
import scala.slick.driver.PostgresDriver.simple._
import java.sql.{ Timestamp, Blob }
case class Test(id: Int, last_updated: Timestamp, data: Blob)
class Tests(tag: Tag) extends Table[Test](tag, "tests") {
def data = column[Blob]("data")
def last_updated = column[Timestamp]("last_updated")
def id = column[Int]("id", O.PrimaryKey)
def * = (id, last_updated, data)
}
Run Code Online (Sandbox Code Playgroud)
错误消息是:
Multiple markers at this line
- No matching Shape found. Slick does not know how to map the given types. Possible causes: T in Table[T] does not match your * projection. Or …Run Code Online (Sandbox Code Playgroud) 我在 postgres 中有一个 bytea 列,我可以使用这样的语句来获得这种输出:
select encode(mycolumn,'escape') from personTable;
Run Code Online (Sandbox Code Playgroud)
并得到:
254\355\000?sr\000?java.util.HashMap??\332\301\303?`\321?\000?F\000
loadFactorI\000 thresholdxp?@\000\000\000\000\000?w?\000\000\000?\000\000\000?t\000?
userIdt\000
USER2200000x
Run Code Online (Sandbox Code Playgroud)
我如何以纯文本形式看到它?它确实存储了一个 java.util.HashMap-