diff --git "a/content/zh/post/wzr/opengauss-\350\241\214\345\255\230\350\241\250\344\270\216\345\210\227\345\255\230\350\241\250.md" "b/content/zh/post/wzr/opengauss-\350\241\214\345\255\230\350\241\250\344\270\216\345\210\227\345\255\230\350\241\250.md"
new file mode 100644
index 0000000000000000000000000000000000000000..7bbaecd5375e3e9685287f7302de65badaa03cc2
--- /dev/null
+++ "b/content/zh/post/wzr/opengauss-\350\241\214\345\255\230\350\241\250\344\270\216\345\210\227\345\255\230\350\241\250.md"
@@ -0,0 +1,280 @@
++++
+title="openGauss社区入门(opengauss-行存表与列存表)"
+date="2022-08-26"
+tags=["openGauss社区开发入门"]
+archives="2022-08"
+author="wangrururu"
+summary="openGauss社区开发入门"
+img="/zh/post/wzr/title/title.jpg"
+times="21:15"
++++
+
+1.行式存储和列式存储的区别:
+(1)行式存储倾向于结构固定,列式存储倾向于结构弱化。
+(2)行式存储一行数据仅需要一个主键,列式存储一行数据需要多份主键。
+(3)行式存储的是业务数据,而列式存储除了业务数据之外,还需要存储列名。
+(4)行式存储更像是一个Java Bean,所有的字段都提前定义好,且不能改变;列式存储更像是一个Map,不提前定义,随意往里面添加key/value。
+2.列存表
+(1)列存表支持的数据类型:
+
+| 类别 | 类型 | 长度 |
+| --- | --- | --- |
+| Numeric Types | smallint | 2 |
+| | integer | 4 |
+| | bigint | 8 |
+| | decimal | -1 |
+| | numeric | -1 |
+| | real | 4 |
+| | double precision | 8 |
+| | smallserial | 2 |
+| | serial | 4 |
+| | bigserial | 8 |
+| | largeserial | -1 |
+| Monetary Types | money | 8 |
+| Character Types | character varying(n), varchar(n) | -1 |
+| | character(n), char(n) | n |
+| | character、char | 1 |
+| | text | -1 |
+| | nvarchar | -1 |
+| | nvarchar2 | -1 |
+| Date/Time Types | timestamp with time zone | 8 |
+| | timestamp without time zone | 8 |
+| | date | 4 |
+| | time without time zone | 8 |
+| | time with time zone | 12 |
+| | interval | 16 |
+| big object | clob | -1 |
+
+(2)列存表的特性
+
+- 列存表不支持数组。
+- 列存表不支持生成列。
+- 列存表不支持创建全局临时表。
+- 创建列存表的数量建议不超过1000个。
+- 列存表的表级约束只支持PARTIAL CLUSTER KEY、UNIQUE、PRIAMRY KEY,不支持外键等表级约束。
+- 列存表的字段约束只支持NULL、NOT NULL和DEFAULT常量值、UNIQUE和PRIMARY KEY。
+- 列存表支持delta表,受参数enable_delta_store控制是否开启,受参数deltarow_threshold控制进入delta表的阀值。
+
+(3)创建一个列存表
+
+```
+CREATE TABLE test1
+(
+W_WAREHOUSE_SK INTEGER NOT NULL,
+W_WAREHOUSE_ID CHAR(16) NOT NULL,
+W_WAREHOUSE_NAME VARCHAR(20) ,
+W_WAREHOUSE_SQ_FT INTEGER ,
+W_GMT_OFFSET DECIMAL(5,2)
+) WITH (ORIENTATION = COLUMN);
+```
+(4)创建局部聚簇存储的列存表。
+
+```
+CREATE TABLE test2
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_GMT_OFFSET DECIMAL(5,2),
+ PARTIAL CLUSTER KEY(W_WAREHOUSE_SK, W_WAREHOUSE_ID)
+) WITH (ORIENTATION = COLUMN);
+```
+(5) 创建一个带压缩的列存表。
+
+```
+CREATE TABLE test3
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_GMT_OFFSET DECIMAL(5,2)
+) WITH (ORIENTATION = COLUMN, COMPRESSION=HIGH);
+```
+3.行存表
+(1)创建一个行存表
+
+```
+CREATE TABLE test4
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_GMT_OFFSET DECIMAL(5,2)
+);
+```
+(2)创建表,并指定W_STATE字段的缺省值为GA。
+
+```
+CREATE TABLE test5
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_STATE CHAR(2) DEFAULT 'GA',
+ W_GMT_OFFSET DECIMAL(5,2)
+);
+```
+(3)创建表,并在事务结束时检查W_WAREHOUSE_NAME字段是否有重复。
+
+```
+CREATE TABLE test6
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) UNIQUE DEFERRABLE,
+ W_WAREHOUSE_SQ_FT INTEGER ,
+ W_GMT_OFFSET DECIMAL(5,2)
+);
+```
+(4)创建一个带有70%填充因子的表。
+
+```
+CREATE TABLE test7
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_WAREHOUSE_SQ_FT INTEGER ,
+ W_GMT_OFFSET DECIMAL(5,2),
+ UNIQUE(W_WAREHOUSE_NAME) WITH(fillfactor=70)
+);
+```
+
+```
+CREATE TABLE test8
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) UNIQUE,
+ W_WAREHOUSE_SQ_FT INTEGER ,
+ W_GMT_OFFSET DECIMAL(5,2)
+) WITH(fillfactor=70);
+```
+(5)创建表,并指定该表数据不写入预写日志。
+
+```
+CREATE UNLOGGED TABLE test9
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_GMT_OFFSET DECIMAL(5,2)
+);
+```
+(6)创建临时表
+
+```
+CREATE TEMPORARY TABLE test10
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_GMT_OFFSET DECIMAL(5,2)
+);
+```
+(7)创建本地临时表,并指定提交事务时删除该临时表数据
+
+```
+CREATE TEMPORARY TABLE test11
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_GMT_OFFSET DECIMAL(5,2)
+) ON COMMIT DELETE ROWS;
+```
+(8)创建全局临时表,并指定会话结束时删除该临时表数据
+
+```
+CREATE GLOBAL TEMPORARY TABLE test12
+(
+ ID INTEGER NOT NULL,
+ NAME CHAR(16) NOT NULL,
+ ADDRESS VARCHAR(50)
+) ON COMMIT PRESERVE ROWS;
+```
+(9)创建表时,不希望因为表已存在而报错
+
+```
+CREATE TABLE IF NOT EXISTS test13
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_GMT_OFFSET DECIMAL(5,2)
+);
+```
+(10)创建普通表空间
+`CREATE TABLESPACE DS_TABLESPACE1 RELATIVE LOCATION 'tablespace/tablespace_1';`
+(11)创建表时,指定表空间
+
+```
+CREATE TABLE test14
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_GMT_OFFSET DECIMAL(5,2)
+) TABLESPACE DS_TABLESPACE1;
+```
+(12)创建表时,单独指定W_WAREHOUSE_NAME的索引表空间
+
+```
+CREATE TABLE test15
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) UNIQUE USING INDEX TABLESPACE DS_TABLESPACE1,
+ W_GMT_OFFSET DECIMAL(5,2)
+);
+```
+(13)创建一个有主键约束的表
+
+```
+CREATE TABLE test16
+(
+ W_WAREHOUSE_SK INTEGER PRIMARY KEY,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ W_GMT_OFFSET DECIMAL(5,2)
+);
+```
+(14) 创建一个有复合主键约束的表
+
+```
+CREATE TABLE test17
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) ,
+ CONSTRAINT W_CSTR_KEY2 PRIMARY KEY(W_WAREHOUSE_SK,W_WAREHOUSE_ID)
+);
+```
+(15) 定义一个检查列约束
+
+```
+CREATE TABLE test18
+(
+ W_WAREHOUSE_SK INTEGER PRIMARY KEY CHECK (W_WAREHOUSE_SK > 0),
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_WAREHOUSE_NAME VARCHAR(20) CHECK (W_WAREHOUSE_NAME IS NOT NULL),
+ W_GMT_OFFSET DECIMAL(5,2)
+);
+```
+(16) 创建一个有外键约束的表
+
+```
+CREATE TABLE tt
+(
+ W_CITY VARCHAR(60) PRIMARY KEY,
+ W_ADDRESS TEXT
+);
+CREATE TABLE test19
+(
+ W_WAREHOUSE_SK INTEGER NOT NULL,
+ W_WAREHOUSE_ID CHAR(16) NOT NULL,
+ W_CITY VARCHAR(60) ,
+ FOREIGN KEY(W_CITY) REFERENCES tt (W_CITY)
+);
+```
+
diff --git "a/content/zh/post/wzr/\345\207\275\346\225\260\347\232\204\345\210\233\345\273\272.md" "b/content/zh/post/wzr/\345\207\275\346\225\260\347\232\204\345\210\233\345\273\272.md"
deleted file mode 100644
index 0f970d5cd6df787fb68dad0176a602a683268e84..0000000000000000000000000000000000000000
--- "a/content/zh/post/wzr/\345\207\275\346\225\260\347\232\204\345\210\233\345\273\272.md"
+++ /dev/null
@@ -1,120 +0,0 @@
-+++
-title="openGauss社区入门(opengauss-函数的创建)"
-date="2022-09-26"
-tags=["openGauss社区开发入门"]
-archives="2022-09"
-author="wangrururu"
-summary="openGauss社区开发入门"
-img="/zh/post/wzr/title/title.jpg"
-times="21:15"
-+++
-
-1.函数的两种语法风格
-(1)兼容PostgreSQL风格
-CREATE [ OR REPLACE ] FUNCTION function_name
- [ ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ]} [, ...] ] ) ]
- [ RETURNS rettype [ DETERMINISTIC ] | RETURNS TABLE ( { column_name column_type } [, ...] )] LANGUAGE lang_name
- [
- {IMMUTABLE | STABLE | VOLATILE }
- | {SHIPPABLE | NOT SHIPPABLE}
- | WINDOW
- | [ NOT ] LEAKPROOF
- | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }
- | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER}
- | {fenced | not fenced}
- | {PACKAGE}
- | COST execution_cost
- | ROWS result_rows
- | SET configuration_parameter { {TO | =} value | FROM CURRENT }}
- ][...]
- {
- AS 'definition'
- }
-(2)O风格
-CREATE [ OR REPLACE ] FUNCTION function_name
- ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ] } [, ...] ] )
- RETURN rettype [ DETERMINISTIC ]
- [
- {IMMUTABLE | STABLE | VOLATILE }
- | {SHIPPABLE | NOT SHIPPABLE}
- | {PACKAGE}
- | {FENCED | NOT FENCED}
- | [ NOT ] LEAKPROOF
- | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }
- | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER }
- | COST execution_cost
- | ROWS result_rows
- | SET configuration_parameter { {TO | =} value | FROM CURRENT
- ][...]
- {
- IS | AS
-} plsql_body
- /
-2.参数说明
-#### 参数说明
-**function_name:**要创建的函数名称(可以用模式修饰)。
-取值范围:字符串,要符合标识符的命名规范,且最多为63个字符,若超过63个字符,数据库会截断并保留前63个字符当做函数名称。
-**argname:**函数参数的名称。
-取值范围:字符串,要符合标识符的命名规范,且最多为63个字符,若超过63个字符,数据库会截断并保留前63个字符当做函数参数名称。
-**argmode:**函数参数的模式。
-取值范围:IN,OUT,INOUT或VARIADIC。缺省值是IN。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的函数定义中。VARIADIC用于声明数组类型的参数。
-**argtype:**函数参数的类型。可以使用%TYPE或%ROWTYPE间接引用变量或表的类型。
-**expression:**参数的默认表达式。
-**rettype:**函数返回值的数据类型。
-如果存在OUT或INOUT参数,可以省略RETURNS子句。如果存在,该子句必须和输出参数所表示的结果类型一致:如果有多个输出参数,则为RECORD,否则与单个输出参数的类型相同。SETOF修饰词表示该函数将返回一个集合,而不是单独一项。与argtype相同,同样可以使用%TYPE或%ROWTYPE间接引用类型。
-**column_name:**字段名称。
-**column_type:**字段类型。
-**definition:**一个定义函数的字符串常量,含义取决于语言。
-它可以是一个内部函数名称、一个指向某个目标文件的路径、一个SQL查询、一个过程语言文本。
-**DETERMINISTIC:**SQL语法兼容接口,未实现功能,不推荐使用。
-**LANGUAGE lang_name:**用以实现函数的语言的名称。
-可以是SQL,internal,或者是用户定义的过程语言名称。
-**WINDOW:**表示该函数是窗口函数。
-替换函数定义时不能改变WINDOW属性。
-自定义窗口函数只支持LANGUAGE是internal,并且引用的内部函数必须是窗口函数。
-**IMMUTABLE:**表示该函数在给出同样的参数值时总是返回同样的结果。
-**STABLE:**表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。
-**VOLATILE:**表示该函数值可以在一次表扫描内改变,因此不会做任何优化。
-**SHIPPABLE**|**NOT SHIPPABLE:**表示该函数是否可以下推执行。
-预留接口,不推荐使用。
-**FENCED**|**NOT FENCED:**声明用户定义的C函数是在保护模式还是非保护模式下执行。
-预留接口,不推荐使用。
-**PACKAGE:**表示该函数是否支持重载。PostgreSQL风格的函数本身就支持重载,此参数主要是针对其它风格的函数。
-不允许package函数和非package函数重载或者替换。
-package函数不支持VARIADIC类型的参数。
-不允许修改函数的package属性。
-**LEAKPROOF:**指出该函数的参数只包括返回值。
-LEAKPROOF只能由系统管理员设置。
-**CALLED ON NULL INPUT:**表明该函数的某些参数是NULL的时候可以按照正常的方式调用。
-该参数可以省略。
-**RETURNS NULL ON NULL INPUTSTRICT**STRICT:用于指定如果函数的某个参数是NULL,此函数总是返回NULL。
-如果声明了这个参数,当有NULL值参数时该函数不会被执行;而只是自动返回一个NULL结果。RETURNS NULL ON NULL INPUT和STRICT的功能相同。
-**EXTERNAL:**目的是和SQL兼容,是可选的,这个特性适合于所有函数,而不仅是外部函数。
-**SECURITY INVOKERAUTHID CURRENT_USER:**表明该函数将带着调用它的用户的权限执行。
-该参数可以省略。SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。
-**SECURITY DEFINERAUTHID DEFINER:**声明该函数将以创建它的用户的权限执行。
-AUTHID DEFINER和SECURITY DEFINER的功能相同。
-**COST execution_cost:**用来估计函数的执行成本。execution_cost以cpu_operator_cost为单位。
-取值范围:正数
-**ROWS result_rows:**估计函数返回的行数。用于函数返回的是一个集合。
-取值范围:正数,默认值是1000行。
-**plsql_body**PL/SQL存储过程体。
-3.示例
-(1)兼容PostgreSQL风格
-CREATE FUNCTION func_add_sql(integer, integer) RETURNS integer
- AS 'select $1 + $2;'
- LANGUAGE SQL
- IMMUTABLE
- RETURNS NULL ON NULL INPUT;
-(2)o风格
-CREATE or replace FUNCTION func1(in a integer, out b integer) RETURN int
- AS
- c int;
- BEGIN
- c := 1;
- b := a + c;
- return c;
- END;
-/
-
-
diff --git "a/content/zh/post/wzr/\345\257\274\345\205\245\345\257\274\345\207\272COPY.md" "b/content/zh/post/wzr/\345\257\274\345\205\245\345\257\274\345\207\272COPY.md"
deleted file mode 100644
index bb9b5d685dab4e939c6bac2f9fbfca65af3f1491..0000000000000000000000000000000000000000
--- "a/content/zh/post/wzr/\345\257\274\345\205\245\345\257\274\345\207\272COPY.md"
+++ /dev/null
@@ -1,6 +0,0 @@
-+++
title="openGauss社区入门(opengauss-导入导出(copy))"
date="2022-09-23"
tags=["openGauss社区开发入门"]
archives="2022-09"
author="wangrururu"
summary="openGauss社区开发入门"
img="/zh/post/wzr/title/title.jpg"
times="12:08"
+++
COPY 命令可以使表和文件之间交换数据,有两种用法:
-
-- COPY TO:把一个表的所有内容都拷贝到一个文件,还可拷贝select查询的结果
-- COPY FROM:从一个文件里拷贝数据到一个表里
-
-其语法格式为:

用法如下:
1.将一个表拷贝到客户端,使用竖线(|)作为域分隔符:

2.从.txt文件中拷贝数据到country表

3.把‘埃’开头的国家名拷贝到一个sql文件里;再将此sql文件导入到表country中。


4.将execl表中数据导入到country表中:
(1)将excel表格字段按照数据库中表的字段顺序整理数据,并保存为csv文件。
(2)用记事本打开csv文件,另存为UTF-8格式。
(3)给用户execl表的读写权限

5.Log errors:
(1)创建日志select copy_error_log_create();
(2)使用

