1、概述 一個(gè)OushuDB集群管理著多個(gè)數(shù)據(jù)庫(database),每個(gè)數(shù)據(jù)庫又包含多個(gè)模式(schema), 一個(gè)模式包含多個(gè)對(duì)象(表,視圖,函數(shù)等),所以這些對(duì)象之間的層級(jí)結(jié)構(gòu)為: database -> schema -> (tables, functions, views) 每個(gè)模式,表,視圖,函數(shù)等只屬于一個(gè)database。本章主要介紹每一種對(duì)象的常見用法。具體使用語法可以參見參考手冊。 2、數(shù)據(jù)庫 OushuDB在初始化完成后,會(huì)默認(rèn)生成三個(gè)數(shù)據(jù)庫,可以使用l命令查看,或者查看 postgres=# l List of databases Name | Owner | Encoding | Access privileges -----------+----------+----------+------------------- postgres | ChangLei | UTF8 | template0 | ChangLei | UTF8 | template1 | ChangLei | UTF8 | (4 rows) 其中template0和template1為模版數(shù)據(jù)庫。template1為系統(tǒng)默認(rèn)用來創(chuàng)建新數(shù)據(jù)庫的模版數(shù)據(jù)庫,用戶可以修改。template0默認(rèn)不接受連接,所以不可更改,目的是始終保存一個(gè)干凈的模版數(shù)據(jù)庫。 創(chuàng)建一個(gè)數(shù)據(jù)庫的時(shí)候,可以指定一個(gè)數(shù)據(jù)庫的模版數(shù)據(jù)庫。缺省為template1,現(xiàn)在OushuDB只支持以template0,template1和postgres數(shù)據(jù)庫為模版數(shù)據(jù)庫。例如: postgres=# create database tdb; # 創(chuàng)建一個(gè)新數(shù)據(jù)庫,默認(rèn)以template0為模版 CREATE DATABASE postgres=#c postgres # 連接postgres postgres=# create table test(i int); # 在postgres數(shù)據(jù)庫中創(chuàng)建表test CREATE TABLE postgres=# create table test_orc(i int) with (appendonly=true, orientation=orc); # 在postgres數(shù)據(jù)庫中創(chuàng)建ORC格式表 CREATE TABLE postgres=# create database dbnew template postgres; CREATE DATABASE postgres=#c dbnew # 連接dbnew 可以看到,dbnew中現(xiàn)在包含test表 dbnew=#d List of relations Schema | Name | Type | Owner | Storage --------+------+-------+----------+------------- public | test | table | ChangLei | append only (1 row) 3、模式 一個(gè)數(shù)據(jù)庫包含多個(gè)模式(schema),而一個(gè)模式可以包含多種命名對(duì)象,比如表,數(shù)據(jù)類型,函數(shù),操作符等。同一個(gè)對(duì)象名字可以用在不同的模式中而不產(chǎn)生沖突。比如schema1中可以包含表test,schema2中也可以同時(shí)包含名字為test的表。從這個(gè)意義上,模式很像一個(gè)命名空間(namespace)。 當(dāng)創(chuàng)建一個(gè)對(duì)象時(shí),默認(rèn)被放置在public模式中。下面是系統(tǒng)默認(rèn)創(chuàng)建的schema。 template1=# dn List of schemas Name | Owner --------------------+---------- hawq_toolkit | ChangLei information_schema | ChangLei pg_aoseg | ChangLei pg_bitmapindex | ChangLei pg_catalog | ChangLei pg_toast | ChangLei public | ChangLei (7 rows) 通常在這樣幾個(gè)場景下,用戶需要使用模式: 允許多個(gè)用戶同時(shí)使用一個(gè)數(shù)據(jù)庫,而不產(chǎn)生名字沖突。 把數(shù)據(jù)庫對(duì)象組織成多個(gè)schema,好像是多個(gè)命名空間一樣 第三方應(yīng)用可以把它們的對(duì)象放到一個(gè)單獨(dú)的schema中,而不和其他對(duì)象產(chǎn)生從圖。 注意:schema不可以嵌套,也就是說,schema中不可以再包含schema。 下面是創(chuàng)建schema的例子。 create schema myschema; 創(chuàng)建或者存取一個(gè)schema中的對(duì)象,可以使用{schema}.{object}形式,例如: create table myschema.test(i int); select * from myschema.test; 刪除一個(gè)空的schema,可以使用: drop schema myschame; 刪除不空的schema,可以使用cascade關(guān)鍵詞: drop schema myschema cascade; 使用{schema}.{object}形式,通常用起來不是很方便??梢酝ㄟ^設(shè)置schema搜索路徑來簡化?!盨HOW search_path”命令可以給出當(dāng)前的schema搜索路徑?!盨ET search_path TO schema-name1, schema-name2”可以設(shè)置schema搜索路徑。例如: postgres=# show search_path; search_path ---------------- "$user",public (1 row) postgres=# create schema myschema; CREATE SCHEMA postgres=# set search_path = public, myschema; SET postgres=# show search_path; search_path ------------------ public, myschema (1 row) |
|