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

执行psql填充Postgres数据库提示stdin is not a tty怎么办

问题说明

执行Postgres数据库导入命令时收到stdin is not a tty提示,执行的命令为:

psql -U postgres kdc < kdc.psql

命令中kdc为目标数据库名称,kdc.psql为存储导入逻辑的SQL脚本,执行命令时的工作目录就是脚本所在目录。


原因说明

这个提示不是致命错误:psql启动时会默认检测当前标准输入是否连接到交互终端(tty),当你用<做shell重定向、把文件内容作为输入传给psql时,输入源是文件而非交互终端,就会抛出这个提示。
如果命令执行完没有抛出其他SQL语法、权限相关的报错,数据会正常导入到目标库,这个提示可以直接忽略。如果提示出现后导入流程直接中断,可参考下面的方案调整。

解决方法
  • 优先使用psql原生的文件读取参数执行脚本,完全绕开stdin重定向的检测逻辑,也是官方推荐的脚本执行方式:
    psql -U postgres -d kdc -f kdc.psql
    
    参数说明:-d显式指定目标数据库,-f指定要执行的SQL脚本路径,执行过程不会触发tty相关检测。
  • 如果需要保留重定向的写法,可以加参数强制psql进入纯非交互模式,跳过终端检测:
    psql -U postgres kdc --no-psqlrc -q < kdc.psql
    
    参数说明:--no-psqlrc跳过加载用户自定义的交互配置文件,-q开启静默模式,关闭所有交互相关的逻辑判断。
  • 如果你是在docker exec、ssh、sudo这类嵌套命令场景下执行的导入,需要给外层命令加关闭tty分配的参数:比如docker exec去掉-t只保留-i,ssh加-T参数禁止分配伪终端即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 08:15:32