PostgreSQL:在不依赖外部文件的情况下从 SQL 脚本在大对象中插入字符串

Har*_*_OK 5 sql postgresql blob

我知道可以使用以下命令从 PostgreSQL 脚本插入大对象lo_import()

INSERT INTO image (name, raster)
VALUES ('beautiful image', lo_import('/etc/motd'));
Run Code Online (Sandbox Code Playgroud)

问题是,我试图在一个紧密锁定的服务器上执行一个脚本,所以我无法将文件上传到它。是否可以在不依赖外部文件的情况下将常量字符串插入到大对象中?

jja*_*nes 6

如果该值小于 1GB,则可以执行以下操作:

INSERT INTO image (name, raster)
    VALUES ('beautiful image', lo_from_bytea(0,$1));
Run Code Online (Sandbox Code Playgroud)

bytea类型是有点讨厌。您可能不得不求助于特定于驱动程序的恶作剧,以使驱动程序/客户端库理解 $1 的类型为bytea。例如,在 Perl 的 DBD::Pg 中,您必须准备语句,然后执行以下操作:

$insert->bind_param(1, $blob, { pg_type => PG_BYTEA });
Run Code Online (Sandbox Code Playgroud)

  • 嗯......有趣......所以如果我想将一些大文本存储到一个大对象中,也许我可以这样做:`INSERT INTO something (name, raster) VALUES ('some name', lo_from_bytea(0,'一些非常长的文本'::bytea))` (2认同)