You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python将文件上传至PostgreSQL数据库指定路径(非导入数据表)

嘿Manish,我完全get到你的需求了——你不是要把文件里的数据导入数据库表,而是想把文件直接传到PostgreSQL服务器的指定路径上,就像从本地往远程服务器复制文件那样对吧?下面给你两种实用的解决方案,根据你的访问权限选就行:

方法1:直接通过SSH传输文件(推荐,如果你能访问服务器)

如果你的本地机器能通过SSH登录到PostgreSQL所在的服务器,这是最直接省心的方式,和普通的本地到服务器文件复制没区别:

  • 打开本地终端,用scp命令传输:
    scp /你的本地文件完整路径/文件名.ext 服务器用户名@服务器IP:/数据库指定的目标路径/文件名.ext
    
    输入服务器登录密码后,文件就会被传到目标路径了。
  • 注意:你需要有服务器的SSH登录权限,同时对目标路径有写入权限,PostgreSQL进程的用户(一般是postgres)也需要能访问该路径。
方法2:通过PostgreSQL函数写入(仅当无法SSH到服务器时用)

如果只能通过PostgreSQL客户端连接服务器,没法直接SSH操作文件系统,可以用PostgreSQL的pg_file_write函数,但要注意权限限制:

  1. 先让数据库超级用户给你的账号授权(因为这个权限风险较高,只有必要时才用):
    GRANT pg_write_server_files TO 你的数据库用户名;
    
  2. 传输文本文件:
    在psql客户端里,先读取本地文件内容,再写入服务器路径:
    -- 把本地文件内容存入psql变量
    \set file_content `cat /本地文件路径/文本文件.txt`
    -- 写入服务器指定路径,false表示覆盖已有文件,true则是追加
    SELECT pg_file_write('/服务器目标路径/目标文件名.txt', :'file_content', false);
    
  3. 传输二进制文件(比如图片、压缩包):
    二进制文件需要先转成十六进制避免乱码,步骤如下:
    • 本地终端转码:
      xxd -p /本地二进制文件路径/文件.bin > hex_temp.txt
      
    • 回到psql客户端写入:
      \set hex_content `cat hex_temp.txt`
      -- 把十六进制解码回二进制再写入
      SELECT pg_file_write('/服务器目标路径/目标文件.bin', decode(:'hex_content', 'hex'), false);
      
  • 注意:PostgreSQL的配置文件(postgresql.conf)可能会限制可写入的路径,比如默认只允许写入日志目录等特定路径,必要时需要调整配置;另外用完后建议收回pg_write_server_files权限,降低安全风险:
    REVOKE pg_write_server_files FROM 你的数据库用户名;
    

内容的提问来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:32:38