本文描述问题及解决方法同样适用于 腾讯云Snova云数仓。
Greenplum(以下简称GP)是基于PostgreSQL的MPP数据库。在使用方式和语法上和PostgreSQL基本一致,而PostgreSQL与MySQL在使用上还是有一些差异。本文在操作层面列举了一些最基本的差异,让MySQL用户能够快速上手GP。
MySQL : MySQL中模式是数据库的别名,这二者没什么区别,创建一个模式就是创建一个数据库。
GP : 在GP中模式属于数据库内的一个概念,用于在数据库中组织对象,起到类似于命名空间的作用,这样用户可以在一个数据库下创建多个模式,这些不同的模式可以有不同的访问权限,并且不同模式下的表名是可以重复。
说明:如果要进行类比的话,GP中的模式更像MySQL中的数据库,在MySQL中用户可以访问同一个实例中的不同数据库,但是在GP中一个连接只能访问一个数据库,但是可以同时访问多个模式,比如join多个模式中的表。
操作 | MySQL | GP |
---|---|---|
切换数据库 | USE {dbname} | \c {dbname} |
查看所有数据库 | SHOW DATABASE | \l |
切换Schema | 无 | SET search_path={schemaname} |
查看所有表 | SHOW TABLES | \d |
查看表结构 | DESC {tablename} | \d+ {tablename} |
按列展示结果 | \G(跟在SQL语句后) | \x(单独运行,再次运行切回按行) |
查看运行时间 | 默认展示 | \timing |
查看客户端连接 | SHOW PROCESSLIST | SELECT * FROM pg_stat_activity |
客户端工具 | mysql -h{hostname} -P{port} -u{user} -p{pwd} {dbname} | PGPASSWORD={pwd} psql -h{hostname} -p{port} -U{user} -d {dbname} |
自增长字段是数据库比较常见的特性,也是MySQL与GP使用习惯差距较大的地方。
MySQL
CREATE TABLE `mysql_test` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL,
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
GP
GP中的自增长需要使用到序列Sequence
有2种创建方式
CREATE TABLE gp_test (
id SERIAL NOT NULL,
name varchar(32) NOT NULL ,
PRIMARY KEY(id)
)
CREATE SEQUENCE users_id_seq INCREMENT BY 2 MINVALUE 10000 MAXVALUE 99999;
CREATE TABLE gp_test (
id bigint NOT NULL DEFAULT NEXTVAL ('users_id_seq'),
name varchar(32) NOT NULL ,
PRIMARY KEY(id)
)
以上2种方式本质上都一样,只不过第一种方式自动创建了一个Sequence,并且与表中字段id绑定到一起。
MySQL中表和字段的注释通常都写在建表语句中,GP则需要单独的语句。
MySQL
CREATE TABLE `mysql_test` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增长主键',
`name` varchar(32) NOT NULL COMMENT '姓名',
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工信息表'
GP
CREATE TABLE gp_test (
id SERIAL,
name varchar(32) ,
PRIMARY KEY(id)
)
COMMENT ON COLUMN gp_test.id is '自增长主键';
COMMENT ON COLUMN gp_test.name is '姓名';
COMMENT ON table gp_test is '员工信息表';
字段类型在各个数据库间都会有不同的差异,以下列举MySQL与GP字段类型的一些主要差异
MySQL | GP |
---|---|
TINYINT | SMALLINT |
MEDIUMINT | INTEGER |
TINYINT UNSIGNED | SMALLINT check({columnname} >= 0) |
FLOAT | REAL |
DATETIME | TIMESTAMP |
LONGTEXT | TEXT |
MEDIUMTEXT | TEXT |
BLOB | BYTEA |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。