gpt4 book ai didi

postgresql - 将 PostgreSQL 输出自动化到 csv

转载 作者:行者123 更新时间:2023-11-29 14:12:32 25 4
gpt4 key购买 nike

mohpc04pp1: /h/u544835 % psql arco
Welcome to psql 8.1.17, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

WARNING: You are connected to a server with major version 8.3,
but your psql client is major version 8.2. Some backslash commands,
such as \d, might not work properly.

dbname=> \o /h/u544835/data25000.csv
dbname=> select url from urltable where scoreid=1 limit 25000;
dbname=> \q

这是从基本上我一直在做的在线链接中获取的,但我需要做的是制作一个脚本,我可以用它每天生成 csv 文件

所以我的脚本目标是在脚本中连接到数据库,运行\o 等命令然后关闭它

但我在编写脚本以说进入 psql arco 数据库然后运行这些查询时遇到了问题。

连接到 db = psql arco 的命令行,然后一旦 scrits 识别出我在该数据库中,就执行这些命令以自动查询 csv 文件。

如果有人可以帮助我入门或指导我阅读 Material 以帮助我克服这一点,我们将不胜感激。

我在标准的 Windows xp 上运行所有这些,ssh'ing 到一个 SLES 设置的 Web 服务器,该服务器保存我运行 psql 版本 8.1.17 的 postgresql 数据库

最佳答案

首先,您应该修复您的设置。事实证明,我们在这里处理的是 PostgreSQL 8.1。这个版本有 reached end of live in 2010 .您需要认真考虑升级 - 或者至少提醒运行服务器的人员。当前版本为 9.1。

您要查找的命令:

psql arco -c "\copy (select url from urltable where scoreid=1 limit 25000) to '/h/u544835/data25000.csv'"

假设您的数据库名为“arco”。针对更改的问题(包括更改的端口)进行了调整。

我现在看到您的问题中出现了 8.1 版,但这都是矛盾的。您需要 Postgres 8.2 或更高版本 才能通过 \copy 元命令使用查询(而不是表)。

Details about psql in the fine manual.


适用于过时的 PostgreSQL 8.1 的替代方法:

psql arco -o /h/u544835/data25000.csv -t -A -c 'SELECT url FROM urltable WHERE scoreid = 1 LIMIT 25000'

在此 related question on dba.SE 下找到有关这些命令行选项的更多信息.


有函数(语法兼容8.1)

另一种方法是创建一个服务器端函数(如果可以的话!)从临时表执行 COPY(旧语法 - 适用于 pg 8.1):

CREATE OR REPLACE FUNCTION f_copy_file()
RETURNS void AS
$BODY$
BEGIN

CREATE TEMP TABLE u_tmp AS (
SELECT url FROM urltable WHERE scoreid = 1 LIMIT 25000
);

COPY u_tmp TO '/h/u544835/data25000.csv';

DROP TABLE u_tmp;

END;
$BODY$
LANGUAGE plpgsql;

然后从 shell 中:

psql arco -c 'SELECT f_copy_file()'

更改分隔符

\f 设置字段分隔符。我再次引用手册:

-F separator--field-separator=separator

Use separator as the field separator for unaligned output.This is equivalent to \pset fieldsep or \f.

或者您可以在 Excel 中更改列分隔符,这里是 instructions from MS .

关于postgresql - 将 PostgreSQL 输出自动化到 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9666519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com