我一直在使用psql Postgres终端,通过以下方式将CSV文件导入到表中

COPY tbname FROM
'/tmp/the_file.csv'
delimiter '|' csv;

除了我必须登录到psql终端才能运行它之外,它工作得很好.

我想知道是否有人知道从Linux shell命令行执行类似命令的方法,类似于Postgres如何允许像bellow这样的shell命令

/opt/postgresql/bin/pg_dump dbname > /tmp/dbname.sql

这允许在不登录psql终端的情况下从Linux shell转储数据库.

推荐答案

As stated in The PostgreSQL Documentation (100) you can pass a command to 101 (PostgreSQL interactive terminal) with the switch 102. Your options are:

1, Client-side CSV: \copy meta-command

执行SQL COPY命令,但会在客户端读取文件,并将内容路由到服务器.

psql -c "\copy tbname FROM '/tmp/the_file.csv' delimiter '|' csv"

(this answer中最初提到的客户端选项)

2. Server-side CSV: SQL COPY command

读取服务器上的文件(当前用户需要具有必要的权限):

psql -c "COPY tbname FROM '/tmp/the_file.csv' delimiter '|' csv;"

在服务器上读取文件所需的DB角色:

COPY仅允许数据库超级用户命名文件或命令

此外,PostgreSQL server进程还需要访问该文件.

Linux相关问答推荐

抛出主,即未捕获到SIGSEGV中的异常结果

排除最大FIFO大小故障

Aarch64在Linux上是否有红色区域,如果有,是16个字节还是128个字节?

如何在不使用LD_LIBRARY_PATH或RPATH的情况下运行链接到共享库的二进制文件?

列出Linux上特定目录和子目录名称的bash命令

如何检测文件系统是否支持权限?

如何在 shell 脚本中自定义 SFTP 详细输出

记录终端输入和输出的 Bash 脚本

删除 csv 列中的不匹配值

获取S3路径的linux命令

永久反转补丁文件

未定义的引用 'shm_open',已在此处添加 -lrt 标志

polkitd未注册身份验证代理的解释

如何从 Linux 中的用户空间访问物理地址?

在 Linux 上用 C 语言读写串口

以原子方式移动目录

Linux 上真的没有异步块 I/O 吗?

Bash 将 awk 的输出捕获到数组中

svn over HTTP 代理

如何用逗号而不是空格分割列表