psql导入、导出表数据-COPY命令

export PGPASSWORD=root
psql -h10.2.29.66  -p5432 -Uroot -d  test980500
 
CREATE TABLE  example_table (
    id integer NOT NULL,
    name character varying(100),
    timestamp_column timestamp,
    decimal_column numeric(5,2)
);

INSERT INTO  example_table (id, name, timestamp_column, decimal_column) VALUES (1, 'John', '2022-01-01 10:00:00', 12.34);
INSERT INTO  example_table (id, name, timestamp_column, decimal_column) VALUES (2, 'Jane', '2022-02-02 12:34:56', 45.67);
INSERT INTO  example_table (id, name, timestamp_column, decimal_column) VALUES (3, 'David', '2022-03-03 00:00:00', 78.90);
INSERT INTO  example_table (id, name, timestamp_column, decimal_column) VALUES (4, 'Emily', '2022-04-04 15:30:00', 11.22);
INSERT INTO  example_table (id, name, timestamp_column, decimal_column) VALUES (5, 'Michael', '2022-05-05 08:15:30', 33.44);
INSERT INTO  example_table (id, name, timestamp_column, decimal_column) VALUES (6, 'Sarah', '2022-06-06 18:45:00', 55.66);
INSERT INTO  example_table (id, name, timestamp_column, decimal_column) VALUES (7, 'Matthew', '2022-07-07 23:59:59', 77.88);
INSERT INTO  example_table (id, name, timestamp_column, decimal_column) VALUES (8, 'Olivia', '2022-08-08 06:30:45', 99.00);
INSERT INTO  example_table (id, name, timestamp_column, decimal_column) VALUES (9, 'Daniel', '2022-09-09 14:20:10', 12.34);
INSERT INTO  example_table (id, name, timestamp_column, decimal_column) VALUES (10, 'Sophia', '2022-10-10 11:11:11', 45.67);



1、copy命令导入数据
在mydb库中创建测试表test_copy
cd /data/tmp_backup
cat > test_copy_in.csv << EOF
1,a
2,b
3,c
EOF

export PGPASSWORD=root
psql -h10.2.30.28 -p5432 -Uroot -d postgres

CREATE TABLE test_copy(id int4, name text);

COPY  test_copy FROM '/data/tmp_backup/test_copy_in.csv'  delimiter ',';
或者
\copy test_copy FROM '/data/tmp_backup/test_copy_in.csv' WITH (FORMAT csv, DELIMITER ',');

select * from test_copy;


2、copy命令导出数据
导出一张表:
\copy example_table TO '/data/tmp_backup/example_table1.csv' WITH (FORMAT csv, DELIMITER ',');

如果是部分数据:
\copy (SELECT * FROM example_table WHERE id=1) TO '/data/tmp_backup/example_table2.csv' WITH (FORMAT csv, DELIMITER ',');


导出参数默认情况下使用,作为分隔符,如果指定使用 | 作为分隔符
DELIMITER '|'


psql支持文件数据导入到数据库,也支持数据库表数据导出到文件中。COPY命令和\copy命令都支持这两类操作,但两者有以下区别:
1)COPY命令是SQL命令,\copy是元命令。
2)COPY命令必须具有SUPERUSER超级权限(将数据通过stdin、stdout方式导入导出情况除外),而\copy元命令不需要SUPERUSER权限。
3)COPY命令读取或写入数据库服务端主机上的文件,而\copy元命令是从psql客户端主机读取或写入文件。
4)从性能方面看,大数据量导出到文件或大文件数据导入数据库,COPY比\copy性能高。

 

posted @ 2025-06-17 15:08  屠魔的少年  阅读(50)  评论(0)    收藏  举报