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文件
所以我的脚本目标是在脚本中连接到db,运行\ o etc命令然后关闭它
但我在编写脚本时遇到问题,请说进入psql arco数据库然后运行这些查询。
命令行连接到db = psql arco 然后一旦scrits识别出我在那个数据库中执行那些命令来自动查询到csv文件。
如果有人能让我开始或者指点我阅读材料让我过去那一点,我们将非常感激。
我正在运行所有这些标准的Windows XP,ssh'ing到SLES设置的Web服务器,它保存我的postgresql数据库运行psql版本8.1.17
答案 0 :(得分:2)
首先,您应该修复您的设置。事实证明,我们在这里处理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.
psql arco -o /h/u544835/data25000.csv -t -A -c 'SELECT url FROM urltable WHERE scoreid = 1 LIMIT 25000'
在此related question on dba.SE下找到有关这些命令行选项的更多信息。
另一种方法是创建一个服务器端函数(如果可以!),从临时表执行COPY(旧语法 - 适用于第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分隔符 --field分离器分离器=
使用separator作为未对齐输出的字段分隔符。 这相当于\ pset fieldsep或\ f。
或者您可以在Excel中更改列分隔符,这里是instructions from MS。