我想将数据库导出为CSV文件。这可能吗?
如果有可能,那我怎么能用PostgreSQL呢?我已经看到我们可以将特定的表转换为CSV文件,但我不知道整个数据库。
答案 0 :(得分:51)
我创建了这个pl / pgsql函数来创建每个表一个.csv文件(不包括视图,感谢@tarikki):
CREATE OR REPLACE FUNCTION db_to_csv(path TEXT) RETURNS void AS $$
declare
tables RECORD;
statement TEXT;
begin
FOR tables IN
SELECT (table_schema || '.' || table_name) AS schema_table
FROM information_schema.tables t INNER JOIN information_schema.schemata s
ON s.schema_name = t.table_schema
WHERE t.table_schema NOT IN ('pg_catalog', 'information_schema')
AND t.table_type NOT IN ('VIEW')
ORDER BY schema_table
LOOP
statement := 'COPY ' || tables.schema_table || ' TO ''' || path || '/' || tables.schema_table || '.csv' ||''' DELIMITER '';'' CSV HEADER';
EXECUTE statement;
END LOOP;
return;
end;
$$ LANGUAGE plpgsql;
我用这种方式:
SELECT db_to_csv('/home/user/dir');
-- this will create one csv file per table, in /home/user/dir/
答案 1 :(得分:41)
您可以在psql控制台上使用它:
\copy (SELECT foo,bar FROM whatever) TO '/tmp/file.csv' DELIMITER ',' CSV HEADER
或者在bash控制台中:
psql -P format=unaligned -P tuples_only -P fieldsep=\, -c "SELECT foo,bar FROM whatever" > output_file
答案 2 :(得分:13)
通过添加一行来修改jlldoras的精彩答案,以防止脚本尝试复制视图:
CREATE OR REPLACE FUNCTION db_to_csv(path TEXT) RETURNS void AS $$
declare
tables RECORD;
statement TEXT;
begin
FOR tables IN
SELECT (table_schema || '.' || table_name) AS schema_table
FROM information_schema.tables t INNER JOIN information_schema.schemata s
ON s.schema_name = t.table_schema
WHERE t.table_schema NOT IN ('pg_catalog', 'information_schema', 'configuration')
AND t.table_type NOT IN ('VIEW')
ORDER BY schema_table
LOOP
statement := 'COPY ' || tables.schema_table || ' TO ''' || path || '/' || tables.schema_table || '.csv' ||''' DELIMITER '';'' CSV HEADER';
EXECUTE statement;
END LOOP;
return;
end;
$$ LANGUAGE plpgsql;
答案 3 :(得分:5)
COPY tablename TO '/tmp/products_199.csv' DELIMITER ',' CSV HEADER;
检查出来
答案 4 :(得分:1)
如果要在导出时指定数据库和用户,可以按照以下方式修改Piotr给出的答案
psql -P format=unaligned -P tuples_only -P fieldsep=\, -c "select * from tableName" > tableName_exp.csv -U <USER> -d <DB_NAME>
答案 5 :(得分:0)
您想要一个包含所有表格数据的大型CSV文件吗?
可能不是。您希望每个表或一个大文件具有单独的文件,其中包含可以用CSV文件头表示的更多信息。
单独的文件
其他答案显示了如何为每个表创建单独的文件。您可以查询数据库以显示具有此类查询的所有表:
SELECT DISTINCT table_name
FROM information_schema.columns
WHERE table_schema='public'
AND position('_' in table_name) <> 1
ORDER BY 1
一个大文件
可以使用COPY
命令创建一个包含PostgreSQL pg_dump
命令使用的CSV格式的所有表的大文件。输出也将包含所有CREATE TABLE
,CREATE FUNCTION
等,但使用Python,Perl或类似语言,您只需轻松提取CSV数据。
答案 6 :(得分:0)
我下载了RazorSQL的副本,打开数据库服务器并右键单击数据库,然后选择了导出表,它为我提供了CSV,EXCEL,SQL等选项。 ..