Greenplum 数据库和schema管理

文章目录

  • Greenplum 数据库和schema管理
    • 关于模板和默认数据
    • 创建一个数据库
      • 克隆一个数据库
      • 创建一个不同Owner的数据库
    • 查看数据库的列表
    • 修改一个数据库
    • 删除一个数据库
    • Scheme管理
      • 系统SCHEMA

一个Greenplum数据库是Greenplum数据库的一个单一实例。 可能会安装有多个单独的Greenplum数据库系统,但是通常只会用环境变量设置选择其中一个。 详情请咨询用户的Greenplum管理员。

一个Greenplum数据库系统中可以有多个数据库。 这与某些数据库管理系统(如Oracle)不同,那些系统中数据库实例 就是数据库。 尽管用户可以在一个Greenplum系统中创建很多数据库,但是客户端程序一次只能连接上并且访问一个数据库,因此用户无法跨数据库进行查询。

关于模板和默认数据

Greenplum数据库提供了一些模板数据库和一个默认数据库 template1template0postgres

默认情况下,每个新创建的数据库都是基于一个模板数据库。 Greenplum数据库默认使用template1作为模板,除非手动指定另一个模板。 不推荐在在模板数据库template1里创建对象。否则,对象将会出现在所有使用默认模板创建的数据库里。

Greenplum数据库内部使用另外一个模板数据库template0。不要删除和更改template0。你可以使用template0创建一个完全干净的,仅包含Greenplum数据库初始化时预定义好的标准对象的数据库。

你可以使用postgres作为第一次连接Greenplum数据库时使用的数据库。Greenplum数据库使用postgres作为管理连接的默认数据库。 例如,postgres被启动进程,全局死锁检测进程和FTS(故障恢复服务)进程在访问catalog表时使用。

创建一个数据库

create database 具体语法

Synopsis
CREATE DATABASE name [ [WITH] [OWNER [=] dbowner]
[TEMPLATE [=] template]
[ENCODING [=] encoding]
[TABLESPACE [=] tablespace]
[CONNECTION LIMIT [=] connlimit ] ]

CREATE DATABASE命令会创建一个新的数据库。例如:

=> CREATE DATABASE new_dbname;create database yanwei;

要创建一个数据库,用户必须具有创建一个数据库的特权或者是一个Greenplum数据库超级用户。 如果用户没有正确的特权,用户就不能创建数据库。可以联系用户的Greenplum数据库管理员为用户授予必要的特权或者替用户创建一个数据库。

用户还可以使用客户端程序createdb来创建一个数据库。 例如,在一个使用提供的主机名和端口连接到Greenplum数据库命令行终端中运行下列命令,它将会创建一个名为mydatabase的数据库:

$ createdb -h masterhost -p 5432 mydatabase[gpadmin@mdw ~]$ createdb -h 127.0.0.1 -p 5432 yanwei1
[gpadmin@mdw ~]$ psql
psql (8.3.23)
Type "help" for help.archdata=# \dList of relationsSchema | Name | Type  |  Owner  | Storage
--------+------+-------+---------+---------public | tb1  | table | gpadmin | heappublic | tb2  | table | gpadmin | heappublic | test | table | gpadmin | heap

上述主机名和端口必须匹配所安装的Greenplum数据库系统的主机名和端口。

一些对象(如角色)会在一个Greenplum数据库系统的所有数据库之间共享 其他对象(例如用户创建的表)则只出现在创建它们的数据库中。

Warning: CREATE DATABASE命令不是事务性的。

克隆一个数据库

默认情况下,一个新数据库通过克隆标准系统数据库模板template1而创建。其实在创建新数据库时,任何一个数据库都可以被用作模板,这样就提供了“克隆”或者复制一个现有数据库及其所包含的所有对象和数据的能力。例如:

=> CREATE DATABASE new_dbname TEMPLATE old_dbname;

创建一个不同Owner的数据库

在创建数据库时可以指定另一个数据库Owner:

=> CREATE DATABASE new_dbname WITH owner=new_user;

查看数据库的列表

如果用户在使用psql客户端程序,用户可以使用 \l元命令来显示用户的Greenplum数据库系统中的数据库和模板的列表。 如果使用的是另一种客户端程序并且用户是超级用户,用户可以从 pg_database系统目录表查询数据库的列表。例如:

=> SELECT datname from pg_database;archdata=# select * from  pg_database;
-[ RECORD 1 ]-+---------------------------------
datname       | template1
datdba        | 10
encoding      | 6
datistemplate | t
datallowconn  | t
datconnlimit  | -1
datlastsysoid | 12096
datfrozenxid  | 681
dattablespace | 1663
datconfig     |
datacl        | {=c/gpadmin,gpadmin=CTc/gpadmin}
-[ RECORD 2 ]-+---------------------------------
datname       | template0
datdba        | 10
encoding      | 6
datistemplate | t
datallowconn  | f
datconnlimit  | -1
datlastsysoid | 12096
datfrozenxid  | 681
dattablespace | 1663
datconfig     |
datacl        | {=c/gpadmin,gpadmin=CTc/gpadmin}
-[ RECORD 3 ]-+---------------------------------
datname       | postgres
datdba        | 10
encoding      | 6
datistemplate | t
datallowconn  | t
datconnlimit  | -1
datlastsysoid | 12096
datfrozenxid  | 681
dattablespace | 1663
datconfig     |
datacl        |
-[ RECORD 4 ]-+---------------------------------
datname       | archdata
datdba        | 10
encoding      | 6
datistemplate | f
datallowconn  | t
datconnlimit  | -1
datlastsysoid | 12096
datfrozenxid  | 681
dattablespace | 1663
datconfig     |
datacl        |
-[ RECORD 5 ]-+---------------------------------
datname       | gpperfmon
datdba        | 10
encoding      | 6
datistemplate | f
datallowconn  | t
datconnlimit  | -1
datlastsysoid | 12096
datfrozenxid  | 681
dattablespace | 1663
datconfig     |
datacl        | {gpadmin=CTc/gpadmin,=c/gpadmin}
-[ RECORD 6 ]-+---------------------------------
datname       | yanwei
datdba        | 10
encoding      | 6
datistemplate | f
datallowconn  | t
datconnlimit  | -1
datlastsysoid | 12096
datfrozenxid  | 681
dattablespace | 1663
datconfig     |
datacl        |
-[ RECORD 7 ]-+---------------------------------
datname       | yanwei1
datdba        | 10
encoding      | 6
datistemplate | f
datallowconn  | t
datconnlimit  | -1
datlastsysoid | 12096
datfrozenxid  | 681
dattablespace | 1663
datconfig     |
datacl        | archdata=# select pg_encoding_to_char(6) from pg_database;
-[ RECORD 1 ]-------+-----
pg_encoding_to_char | UTF8
-[ RECORD 2 ]-------+-----
pg_encoding_to_char | UTF8
-[ RECORD 3 ]-------+-----
pg_encoding_to_char | UTF8
-[ RECORD 4 ]-------+-----
pg_encoding_to_char | UTF8
-[ RECORD 5 ]-------+-----
pg_encoding_to_char | UTF8
-[ RECORD 6 ]-------+-----
pg_encoding_to_char | UTF8
-[ RECORD 7 ]-------+-----
pg_encoding_to_char | UTF8
column type references description
datname name Database name.
datdba oid pg_authid.oid Owner of the database, usually the user who created it.
encoding int4 Character encoding for this database. pg_ encoding_to_char() can translate this number to the encoding name.
datistemplate boolean If true then this database can be used in the TEMPLATE clause of CREATE DATABASE to create a new database as a clone of this one.
datallowconn boolean If false then no one can connect to this database. This is used to protect the template0 database from being altered.
datconnlimit int4 Sets the maximum number of concurrent connections that can be made to this database. -1 means no limit.
datlastsysoid oid Last system OID in the database

修改一个数据库

ALTER DATABASE命令可以修改数据库的属性,例如拥有者、名称或者默认配置属性。 例如,下面的命令会修改一个数据库的默认方案搜索路径( search_path配置参数):

=> ALTER DATABASE mydatabase SET search_path TO myschema, public, pg_catalog;show search_path
-[ RECORD 1 ]---------------
search_path | "$user",public
PostgreSQL会首先在和当前用户的用户名相同的模式中查询,如果相关数据不在此模式中,则会继续在路径中的下一个模式中查询(上图中为public),以此类推。archdata=#  select catalog_name,schema_name,schema_owner from information_schema.schemata;catalog_name |    schema_name     | schema_owner
--------------+--------------------+--------------archdata     | pg_catalog         | gpadminarchdata     | pg_toast           | gpadminarchdata     | pg_bitmapindex     | gpadminarchdata     | public             | gpadminarchdata     | pg_aoseg           | gpadminarchdata     | information_schema | gpadminarchdata     | gp_toolkit         | gpadmin

要修改一个数据库,用户必须是该数据库的拥有者或者超级用户。

alter database yanwei with connection limit 200 ;-[ RECORD 7 ]-+---------------------------------
datname       | yanwei
datdba        | 10
encoding      | 6
datistemplate | f
datallowconn  | t
datconnlimit  | 200
datlastsysoid | 12096
datfrozenxid  | 681
dattablespace | 1663
datconfig     |
datacl        | 

删除一个数据库

DROP DATABASE命令删除一个数据库。 它会移除该数据库的系统目录项并且删除该数据库在磁盘上的目录及其中包含的数据。 要删除一个数据库,用户必须是该数据库的拥有者或者超级用户,并且当用户或者其他人正连接到该数据库时不能删除它。 在删除一个数据库时,可以连接到postgres(或者另一个数据库)。例如:

=> \c postgres => DROP DATABASE mydatabase;

用户也可以使用客户端程序dropdb来删除一个数据库。 例如,下面的命令会用给出的主机名和端口连接到Greenplum数据库并且删除数据库mydatabase

$ dropdb -h masterhost -p 5432 mydatabase

Warning: 删除数据库不能被撤销。

DROP DATABASE命令不是事务性的。

Scheme管理

1 查询当前search_path:

archdata=# show search_path;search_path
----------------"$user",public
(1 row)

2 创建一个测试表

create table test1 (int int);
查询该表所属模式:
\dt
archdata=# \dtList of relationsSchema | Name  | Type  |  Owner  | Storage
--------+-------+-------+---------+---------public | one   | table | gpadmin | heappublic | tb1   | table | gpadmin | heappublic | tb2   | table | gpadmin | heappublic | test  | table | gpadmin | heappublic | test1 | table | gpadmin | heap

3 默认的test是创建到了public模式下,因为没有登录名相同的用户

4 创建登录名用户

select catalog_name,schema_name,schema_owner from information_schema.schemata;
archdata=# select catalog_name,schema_name,schema_owner from information_schema.schemata;catalog_name |    schema_name     | schema_owner
--------------+--------------------+--------------archdata     | pg_catalog         | gpadminarchdata     | pg_toast           | gpadminarchdata     | pg_bitmapindex     | gpadminarchdata     | public             | gpadminarchdata     | pg_aoseg           | gpadminarchdata     | information_schema | gpadminarchdata     | gp_toolkit         | gpadmin
(7 rows)archdata=# create schema gpadmin;

5 这样默认创建的表就在gpadmin模式下了

archdata=# create schema gpadmin;
CREATE SCHEMA
archdata=# create table four (int int);
NOTICE:  Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'int' as the Greenplum Database data distribution key for this table.
HINT:  The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
CREATE TABLE
archdata=# \dtList of relationsSchema  | Name  | Type  |  Owner  | Storage
---------+-------+-------+---------+---------gpadmin | four  | table | gpadmin | heappublic  | one   | table | gpadmin | heappublic  | tb1   | table | gpadmin | heappublic  | tb2   | table | gpadmin | heappublic  | test  | table | gpadmin | heappublic  | test1 | table | gpadmin | heap
(6 rows)

6 显性的创建表

create table public.seven(int int);create table gpadmin.SIX(int int);archdata=# \dtList of relationsSchema  | Name  | Type  |  Owner  | Storage
---------+-------+-------+---------+---------gpadmin | four  | table | gpadmin | heapgpadmin | six   | table | gpadmin | heappublic  | one   | table | gpadmin | heappublic  | seven | table | gpadmin | heappublic  | tb1   | table | gpadmin | heappublic  | tb2   | table | gpadmin | heappublic  | test  | table | gpadmin | heappublic  | test1 | table | gpadmin | heap

6 查询schema和该schema下的表

SELECT pn.oid AS schema_oid, iss.catalog_name, iss.schema_owner, iss.schema_name
FROM information_schema.schemata issINNER JOIN pg_namespace pn ON pn.nspname = iss.schema_name;archdata=# SELECT pn.oid AS schema_oid, iss.catalog_name, iss.schema_owner, iss.schema_name
archdata-# FROM information_schema.schemata iss
archdata-#          INNER JOIN pg_namespace pn ON pn.nspname = iss.schema_name;schema_oid | catalog_name | schema_owner |    schema_name
------------+--------------+--------------+--------------------11 | archdata     | gpadmin      | pg_catalog99 | archdata     | gpadmin      | pg_toast3012 | archdata     | gpadmin      | pg_bitmapindex2200 | archdata     | gpadmin      | public6104 | archdata     | gpadmin      | pg_aoseg25747 | archdata     | gpadmin      | gpadmin  -----新建的schema11724 | archdata     | gpadmin      | information_schema11916 | archdata     | gpadmin      | gp_toolkitarchdata=# select * from pg_tables where schemaname='gpadmin';schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers
------------+-----------+------------+------------+------------+----------+-------------gpadmin    | four      | gpadmin    |            | f          | f        | fgpadmin    | six       | gpadmin    |            | f          | f        | f
(2 rows)

7 删除scheme

drop schema gpadmin;  --空schemadrop schema gpadmin cascade;--一起删除archdata=# SELECT pn.oid AS schema_oid, iss.catalog_name, iss.schema_owner, iss.schema_name
archdata-# FROM information_schema.schemata iss
archdata-#          INNER JOIN pg_namespace pn ON pn.nspname = iss.schema_name;schema_oid | catalog_name | schema_owner |    schema_name
------------+--------------+--------------+--------------------11 | archdata     | gpadmin      | pg_catalog99 | archdata     | gpadmin      | pg_toast3012 | archdata     | gpadmin      | pg_bitmapindex2200 | archdata     | gpadmin      | public6104 | archdata     | gpadmin      | pg_aoseg11724 | archdata     | gpadmin      | information_schema11916 | archdata     | gpadmin      | gp_toolkit
(7 rows)

系统SCHEMA

下列系统级schema存在于每一个数据库中:

  • pg_catalog包含着系统目录表、内建数据类型、函数和操作符。即便在schema搜索路径中没有显式地提到它,它也总是schema搜索路径的一部分。
  • information_schema有一个包含数据库中对象信息的视图集合组成。这些视图以一种标准化的方式从系统目录表中得到系统信息。
  • pg_toast存储大型对象,如超过页面尺寸的记录。这个schema由Greenplum数据库系统内部使用。
  • pg_bitmapindex存储位图索引对象,例如值的列表。 这个schema由Greenplum数据库系统内部使用。
  • pg_aoseg存储追加优化表对象。 这个schema由Greenplum数据库系统内部使用。
  • gp_toolkit是一个管理用途的schema,它包含用户可以用SQL命令访问的外部表、视图和函数。 所有的数据库用户都能访问gp_toolkit来查看和查询系统日志文件以及其他系统指标。

Greenplum 数据库和schema管理相关推荐

  1. Python【算法中心 02】Web框架Django管理页面使用(管理员账号创建+API使用+应用添加)GreenPlum数据库引擎及API测试

    1.SQLite管理员账号创建 SQLite 是 Django 默认的数据库体量上类似与 Apache Derby,配置信息如下: DATABASES = {'default': {'ENGINE': ...

  2. greenplum数据库集群的备份与恢复看这一篇就够啦!

    针对greenplum-db-6.1.0的数据库集群的备份与恢复方案 使用gpbackup和gprestore的GPDB的备份方案 1.前言 2.Greenplum备份恢复发展历程 3.备份方案的优劣 ...

  3. Greenplum 数据库

    一.Greenplum数据库 是业界最快最高性价比的关系型分布式数据库,它在开源的PostgreSQL的基础上采用MPP架构(Massive Parallel Processing,海量并行处理),具 ...

  4. Greenplum数据库集群安装指南

    Greenplum数据库集群安装文档 说明:本文档是在同事指导下,根据操作步骤以及自己理解所整理 ------阿莲 未说明服务器或者执行用户的地方均是在所有服务器上使用root用户执行一遍 一.安装前 ...

  5. 开源大数据引擎:Greenplum 数据库架构分析

    Greenplum 数据库是最先进的分布式开源数据库技术,主要用来处理大规模的数据分析任务,包括数据仓库.商务智能(OLAP)和数据挖掘等.自2015年10月正式开源以来,受到国内外业内人士的广泛关注 ...

  6. Greenplum数据库(GPDB)初识

    1.特性 Greenplum数据库(GPDB),分布式数据库,数据仓库快速查询工具,特性: 1)GPDB完全支持ANSI SQL 2008标准和SQL OLAP 2003 扩展,从应用编程接口上讲,它 ...

  7. Greenplum【环境搭建 04】使用GPKafka实现Kafka数据导入Greenplum数据库(扩展安装文件网盘分享)

    分享资源地址及文件列表: 链接:https://pan.baidu.com/s/1XVTxKLkOYrL4pCZpFfs-Tg 提取码:sq90 包含文件: # 命令执行 gpkafka # 扩展安装 ...

  8. Greenplum 数据库架构分析

    Greenplum 数据库是最先进的分布式开源数据库技术,主要用来处理大规模的数据分析任务,包括数据仓库.商务智能(OLAP)和数据挖掘等.自2015年10月正式开源以来,受到国内外业内人士的广泛关注 ...

  9. oracle窗帘位图索引,Greenplum数据库设计开发规范参考.docx

    Greenplum数据库设计开发规范参考 Greenplum数据库设计开发规范参考文档2016年7月目 录Greenplum数据库设计开发规范1V1.511 前言41.1 文档目的41.2 文档范围4 ...

  10. 盘点 Greenplum 数据库的十大特点

    导读:本文简单介绍Greenplum具备的特性. 作者:王春波 来源:大数据DT(ID:hzdashuju) 01 开放源代码 Greenplum数据库于2015年由Pivotal公司开源,遵循Apa ...

最新文章

  1. Qt安装后配置环境变量(Mac)
  2. NSArray与NSString、NSData,NSDictionary与NSString、NSData 相互转化
  3. Oracle中若何间接运转OS敕令(下)
  4. 面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?
  5. Springboot只允许进入登录注册的页面,没登录页面进行拦截。
  6. 错误:子进程 已安装 pre-removal 脚本 返回了错误号 1
  7. [20170508]listagg拼接显示字段.txt
  8. epoll, NIO,AIO
  9. 基于编辑方法的文本生成(下)
  10. 【大规模深度强化学习(一) 】深度强化学习中的异步方法(A3C)
  11. 最适合晚上睡不着看的 8 个网站,建议收藏哦
  12. 6. C 语言预处理
  13. 倒计时 5 天!Apache Flink Meetup · 北京站,1.13 新版本 x 互娱实践分享的开发者盛筵!...
  14. 数值的加减会改变python中id_在Python中将一个变量的值赋给另一个变量时会发生什么?...
  15. 微云存储空间多大_微云免费存储容量由1T降为10G,百度还能坚持多久?
  16. 大话数据结构学习笔记
  17. 微信计数器|微信自动加好友|微信自动通过好友|微信HOOK|微信静默清粉
  18. 希尔密码 matlab,非数学专业线性代数教学设计
  19. java 十六进制颜色代码_RGB颜色与16进制颜色的换算方法
  20. walle 2.0 瓦力部署详细流程

热门文章

  1. 杭州第二机场选址的三个备选方案仁和、瓶窑、塘栖中选择瓶窑的理由。元芳,你怎么看?
  2. Mysql之Specified key was too long; max key length is 767 bytes
  3. JAVA中Long与Integer踩的坑
  4. GIS中EPSG4326与EPSG3857的区别及转换关系-20220830更新
  5. walking机器人仿真教程-激光导航-TEB算法导航
  6. 小写和大写开头的英文名字  internet 和Internet在意思上有何重要区别?
  7. python求圆锥体的表面积公式_求圆柱和圆锥的体积公式及表面积公式!!
  8. matlab中simulink耦合线圈,基于AMESim和Matlab/Simulink的耦合振动台建模仿真
  9. 线性代数之——复数矩阵
  10. python给ppt表格加边框_向ppt里插入图片和表格