一、gsql导入导出数据
1、i导入sql文件
\i FILE
从文件FILE中读取内容,并将其当作输入,执行查询。
1、创建兼容mysql的数据库
2、创建sql文本
vi test.sql
-- ----------------------------
-- 这是一个对test表描述的注释
-- ----------------------------
drop table if exists TEST;
CREATE TABLE TEST (
ID int4 NOT NULL COMMENT 'ID号',
NAME varchar(10) NOT NULL COMMENT '姓名',
UNIQUE INDEX INDEX_TEST_NAME (NAME) USING BTREE,
PRIMARY KEY (ID) USING BTREE
)COMMENT='这是一个测试表';
insert into TEST (ID,NAME) values (1,'zhangsan');
insert into TEST (ID,NAME) values (2,'lisi');
insert into TEST (ID,NAME) values (3,'wangwu');
3、登录数据库
gsql -d database_test -p 26000 -U joe -W Mysql@123456 -r
4、导入数据
database_test=> \i /tmp/test.sql
DROP TABLE
gsql:/tmp/test.sql:10: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_pkey" for table "test"
gsql:/tmp/test.sql:10: NOTICE: CREATE TABLE / UNIQUE will create implicit index "index_test_name" for table "test"
CREATE TABLE
INSERT 0 1
INSERT 0 1
INSERT 0 1
#甚至导入的时候可以tab键补全路径
2、copy导入导出数据
\copy { table [ ( column_list ) ] | ( query ) } { from | to } { filename | stdin | stdout | pstdin | pstdout }
[ with ] [ binary ] [ oids ] [ delimiter [ as ] 'character' ] [ null [ as ] 'string' ] [ csv [ header ] [ quote
[ as ] 'character' ] [ escape [ as ] 'character' ] [ force quote column_list | * ] [ force not null column_list ]
[ force null column_list ] ][parallel integer]
在任何psql客户端登录数据库成功后可以执行导入导出数据, 这是一个运行SQL COPY命令的操作,但不是读取或写入指定文件的服务器,而是读取或
写入文件,并在服务器和本地文件系统之间路由数据。 这意味着文件的可访问性和权限是本地用户的权限,而不是服务器的权限,并且不需要数据库
初始化用户权限。
说明:
\COPY只适合小批量,格式良好的数据导入,不会对非法字符进行预处理,也无容错能力。导入数据应优先选择COPY。
\COPY 可以指定数据导入时的客户端数量,从而实现数据文件的并行导入,目前并发数范围为[1, 8]。
\COPY并行导入目前存在以下约束:临时表的并行导入不支持、在事务内的并行导入不支持、对二进制文件的并行导入不支持、数据导入支持AES128加
密时不支持。在这些情况下,即使指定了parallel参数,仍然会走非并行流程。
1、登录数据库
gsql -d database_test -p 26000 -U joe -W Mysql@123456 -r
2、全量导出test表的数据
指定分隔符为|
\copy test to '/tmp/test1.sql' delimiter '|'; #copy要加\
cat /tmp/test1.sql
1|zhangsan
2|lisi
3|wangwu
2、只导出test表id为2的数据
\copy (select * from test where id=2 ) to '/tmp/test2.sql' with (delimiter E'|');
3、清理test表并导入test2.sql数据
delete from test;
\copy test from '/tmp/test2.sql' with (delimiter E'|');
4、导出为csv文件
\copy (select * from test where id=2 ) to '/tmp/test3.csv' with (delimiter E',');
3、非交互执行命令
有点类似mysql -e
c, --command=COMMAND #声明gsql要执行一条字符串命令然后退出。
gsql -d database_test -p 26000 -U joe -W Mysql@123456 -r -c "select * from test where id=2"
二、navicat导入导出数据
可以直接使用navicat工具中PostgreSQL连接,然后转储SQL文件,可以导出数据和结构或者只导出表结构
注意点
此处不再描述
navicat导出的数据格式易懂而且非常规范
大坑:
timestamp without time zone类型的使用navicat导出变成了timestamp(6)
但是timestamp默认的是timestamp with time zone
如果再次使用工具导入,就会变成timestamp(6) with time zone
进行查询的时候就会显示时间和时区