我的编程空间,编程开发者的网络收藏夹
学习永远不晚

citus中DDL操作规范有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

citus中DDL操作规范有哪些

本篇内容主要讲解“citus中DDL操作规范有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“citus中DDL操作规范有哪些”吧!

背景

citus是PG的一个插件,插件主要针对普通SQL(非UTILITY)加HOOK进行了一些ROUTE处理,同时使用UDF对表进行新建分区的操作。

如果用户如果要执行DDL,那么CITUS无法接管,应该如何操作呢?

分两种情况,一种需要在所有节点(CN以及WORKER)执行,还有一些只需要在CN节点执行。

需要在所有节点(CN以及WORKER)执行的DDL

由于这些DDL在CN节点执行时,不会自动在WORKER执行,所以需要在所有节点执行。

常用的DDL包括:

1、新建用户

Command:     CREATE ROLE  
Description: define a new database role  
Syntax:  
CREATE ROLE name [ [ WITH ] option [ ... ] ]  
  
where option can be:  
  
      SUPERUSER | NOSUPERUSER  
    | CREATEDB | NOCREATEDB  
    | CREATEROLE | NOCREATEROLE  
    | INHERIT | NOINHERIT  
    | LOGIN | NOLOGIN  
    | REPLICATION | NOREPLICATION  
    | BYPASSRLS | NOBYPASSRLS  
    | CONNECTION LIMIT connlimit  
    | [ ENCRYPTED ] PASSWORD 'password'  
    | VALID UNTIL 'timestamp'  
    | IN ROLE role_name [, ...]  
    | IN GROUP role_name [, ...]  
    | ROLE role_name [, ...]  
    | ADMIN role_name [, ...]  
    | USER role_name [, ...]  
    | SYSID uid

2、新建数据库

Command:     CREATE DATABASE  
Description: create a new database  
Syntax:  
CREATE DATABASE name  
    [ [ WITH ] [ OWNER [=] user_name ]  
           [ TEMPLATE [=] template ]  
           [ ENCODING [=] encoding ]  
           [ LC_COLLATE [=] lc_collate ]  
           [ LC_CTYPE [=] lc_ctype ]  
           [ TABLESPACE [=] tablespace_name ]  
           [ ALLOW_CONNECTIONS [=] allowconn ]  
           [ CONNECTION LIMIT [=] connlimit ]  
           [ IS_TEMPLATE [=] istemplate ] ]

所有节点新建数据库后一定不要忘记:

2.1、在所有节点新增的DB内添加citus插件

create extension citus;

2.2、仅在CN节点,连到新建数据库里面添加worker节点。(千万不要忘记,每新建一个DB,都需要重复做。所以可以把它做到模板库里面,新建DB时,使用模板新建。)

例如

su - postgres -c "psql -c \"SELECT * from master_add_node('xxx.xxx.xxx.224', 1921);\""    
su - postgres -c "psql -c \"SELECT * from master_add_node('xxx.xxx.xxx.230', 1921);\""    
su - postgres -c "psql -c \"SELECT * from master_add_node('xxx.xxx.xxx.231', 1921);\""    
su - postgres -c "psql -c \"SELECT * from master_add_node('xxx.xxx.xxx.225', 1921);\""    
su - postgres -c "psql -c \"SELECT * from master_add_node('xxx.xxx.xxx.227', 1921);\""    
su - postgres -c "psql -c \"SELECT * from master_add_node('xxx.xxx.xxx.232', 1921);\""    
su - postgres -c "psql -c \"SELECT * from master_add_node('xxx.xxx.xxx.226', 1921);\""    
su - postgres -c "psql -c \"SELECT * from master_add_node('xxx.xxx.xxx.229', 1921);\""    
    
postgres=# SELECT * FROM master_get_active_worker_nodes();    
   node_name    | node_port     
----------------+-----------    
 xxx.xxx.xxx.227 |      1921    
 xxx.xxx.xxx.229 |      1921    
 xxx.xxx.xxx.231 |      1921    
 xxx.xxx.xxx.225 |      1921    
 xxx.xxx.xxx.224 |      1921    
 xxx.xxx.xxx.226 |      1921    
 xxx.xxx.xxx.230 |      1921    
 xxx.xxx.xxx.232 |      1921    
(8 rows)

2.3、如果使用了MX功能,还需要添加一遍。

参考

《PostgreSQL sharding : citus 系列1 - 多机部署(含OLTP(TPC-B)测试)》

### CN MX : OLTP 读、写能力扩展

3、新建schema

Command:     CREATE SCHEMA  
Description: define a new schema  
Syntax:  
CREATE SCHEMA schema_name [ AUTHORIZATION role_specification ] [ schema_element [ ... ] ]  
CREATE SCHEMA AUTHORIZATION role_specification [ schema_element [ ... ] ]  
CREATE SCHEMA IF NOT EXISTS schema_name [ AUTHORIZATION role_specification ]  
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION role_specification  
  
where role_specification can be:  
  
    user_name  
  | CURRENT_USER  
  | SESSION_USER

4、新建函数

自定义函数  
  
Command:     CREATE FUNCTION  
Description: define a new function  
Syntax:  
CREATE [ OR REPLACE ] FUNCTION  
    name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )  
    [ RETURNS rettype  
      | RETURNS TABLE ( column_name column_type [, ...] ) ]  
  { LANGUAGE lang_name  
    | TRANSFORM { FOR TYPE type_name } [, ... ]  
    | WINDOW  
    | IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF  
    | CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT  
    | [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER  
    | PARALLEL { UNSAFE | RESTRICTED | SAFE }  
    | COST execution_cost  
    | ROWS result_rows  
    | SET configuration_parameter { TO value | = value | FROM CURRENT }  
    | AS 'definition'  
    | AS 'obj_file', 'link_symbol'  
  } ...  
    [ WITH ( attribute [, ...] ) ]

5、新建操作符

自定义操作符

6、新建类型

自定义类型

7、新建插件

Command:     CREATE EXTENSION  
Description: install an extension  
Syntax:  
CREATE EXTENSION [ IF NOT EXISTS ] extension_name  
    [ WITH ] [ SCHEMA schema_name ]  
             [ VERSION version ]  
             [ FROM old_version ]  
             [ CASCADE ]

以上为常用的DDL,需要在所有节点执行。

仅需要在CN节点执行的DDL

1、新建表,调用citus函数创建分片。

例子

create table test(id int primary key, info text);  
  
select create_distributed_table('test','id');

2、新建视图

Command:     CREATE VIEW  
Description: define a new view  
Syntax:  
CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ]  
    [ WITH ( view_option_name [= view_option_value] [, ... ] ) ]  
    AS query  
    [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]

视图仅需在CN节点操作,因为SQL最后会解析成视图里面的内容。例如

create view v2 as select * from pgbench_accounts where aid=1;  
  
create view v3 as select * from v2;  
  
postgres=# explain verbose select * from v2;  
                                                                   QUERY PLAN                                                                      
-------------------------------------------------------------------------------------------------------------------------------------------------  
 Custom Scan (Citus Router)  (cost=0.00..0.00 rows=0 width=0)  
   Output: remote_scan.aid, remote_scan.bid, remote_scan.abalance, remote_scan.filler  
   Task Count: 1  
   Tasks Shown: All  
   ->  Task  
         Node: host=172.24.211.232 port=1921 dbname=postgres  
         ->  Index Scan using pgbench_accounts_pkey_106819 on public.pgbench_accounts_106819 pgbench_accounts  (cost=0.28..2.50 rows=1 width=97)  
               Output: pgbench_accounts.aid, pgbench_accounts.bid, pgbench_accounts.abalance, pgbench_accounts.filler  
               Index Cond: (pgbench_accounts.aid = 1)  
(9 rows)  
  
postgres=# explain verbose select * from v3;  
                                                                   QUERY PLAN                                                                      
-------------------------------------------------------------------------------------------------------------------------------------------------  
 Custom Scan (Citus Router)  (cost=0.00..0.00 rows=0 width=0)  
   Output: remote_scan.aid, remote_scan.bid, remote_scan.abalance, remote_scan.filler  
   Task Count: 1  
   Tasks Shown: All  
   ->  Task  
         Node: host=172.24.211.232 port=1921 dbname=postgres  
         ->  Index Scan using pgbench_accounts_pkey_106819 on public.pgbench_accounts_106819 pgbench_accounts  (cost=0.28..2.50 rows=1 width=97)  
               Output: pgbench_accounts.aid, pgbench_accounts.bid, pgbench_accounts.abalance, pgbench_accounts.filler  
               Index Cond: (pgbench_accounts.aid = 1)  
(9 rows)

到此,相信大家对“citus中DDL操作规范有哪些”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

citus中DDL操作规范有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript中有哪些UMD规范

今天就跟大家聊聊有关JavaScript中有哪些UMD规范,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。说明1、UMD是AMD和CommonJS的结合。CommonJS模块是根据服务
2023-06-20

pandas常规操作有哪些

这篇文章主要介绍了pandas常规操作有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一 聚合函数1. numpy、pandas使用的统计方式在数组中经常使用的聚合方式d
2023-06-27

C#中有哪些命名规范

本篇文章给大家分享的是有关C#中有哪些命名规范,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。匈牙利命名法 我最早接触到的命名规范是匈牙利命名法,该方法出自微软,基本上是一些在你
2023-06-17

C语言中作用域编码规范有哪些

这期内容当中小编将会给大家带来有关C语言中作用域编码规范有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。规范本身应该是一个规定,但C/C++在编码上并没有这样的规定,凡符合C/C++语法的就是合格的代
2023-06-17

Python中的编码规范有哪些

这篇“Python中的编码规范有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python中的编码规范有哪些”文章吧。编
2023-07-06

C#中有哪些.NetFramework编码规范

本篇文章给大家分享的是有关C#中有哪些.NetFramework编码规范,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。.Net Framework中的委托与事件尽管很多范例都能
2023-06-17

PHP API框架中PSR规范有哪些

这篇文章主要介绍“PHP API框架中PSR规范有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP API框架中PSR规范有哪些”文章能帮助大家解决问题。什么是PSR?介绍PSR之前需要介绍
2023-07-05

CSS中BEM的命名规范有哪些

这篇文章将为大家详细讲解有关CSS中BEM的命名规范有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1 什么是 BEM 命名规范Bem 是块(block)、元素(element)、修饰符
2023-06-08

python中字典合并规范有哪些

本篇文章为大家展示了python中字典合并规范有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pill
2023-06-14

Java中代码注释的规范有哪些

Java中代码注释的规范有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码注释是架起程序设计者与程序阅读者之间的通信桥梁,最大限度的提高团队开发合作效率。
2023-05-31

编程热搜

目录