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; -/ -![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1664524047972-3dca4ace-202a-4770-bb4e-5af8bc3bc9da.png#clientId=u37a8719b-90ba-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=266&id=uc2f3d560&margin=%5Bobject%20Object%5D&name=image.png&originHeight=332&originWidth=905&originalType=binary&ratio=1&rotation=0&showTitle=false&size=155384&status=error&style=none&taskId=ucb50e9a2-ddd3-443b-894e-d7707fbc0f3&title=&width=724) - 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:从一个文件里拷贝数据到一个表里 - -其语法格式为:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1663934483248-5cd40a79-9f8d-4614-92b4-58a714f9ea62.png#clientId=uf7186fc9-316d-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=613&id=u14efb006&margin=%5Bobject%20Object%5D&name=image.png&originHeight=766&originWidth=919&originalType=binary&ratio=1&rotation=0&showTitle=false&size=390774&status=error&style=none&taskId=u54605cc4-d0d3-4549-9f4b-8808ce8827c&title=&width=735.2)
用法如下:
1.将一个表拷贝到客户端,使用竖线(|)作为域分隔符:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1663934555311-830c8399-c0b1-49fd-a078-66c13cccc155.png#clientId=uf7186fc9-316d-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=318&id=uce171067&margin=%5Bobject%20Object%5D&name=image.png&originHeight=397&originWidth=1706&originalType=binary&ratio=1&rotation=0&showTitle=false&size=806686&status=error&style=none&taskId=uf65d02d8-f87f-4e29-8e6c-bf2566cc240&title=&width=1364.8)
2.从.txt文件中拷贝数据到country表
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1663934587781-2dd40467-5496-4c4e-945b-803345db8d4f.png#clientId=uf7186fc9-316d-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=464&id=udc655331&margin=%5Bobject%20Object%5D&name=image.png&originHeight=580&originWidth=1670&originalType=binary&ratio=1&rotation=0&showTitle=false&size=398500&status=error&style=none&taskId=ucec6879d-c32e-41ae-8475-2b2e2834dfb&title=&width=1336)
3.把‘埃’开头的国家名拷贝到一个sql文件里;再将此sql文件导入到表country中。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1663934628830-90908f61-4939-4aea-a901-38505a743cd8.png#clientId=uf7186fc9-316d-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=135&id=u37f76230&margin=%5Bobject%20Object%5D&name=image.png&originHeight=169&originWidth=1968&originalType=binary&ratio=1&rotation=0&showTitle=false&size=309943&status=error&style=none&taskId=u5bfe8b4a-99fc-4db9-a1fb-b0b9a61ddda&title=&width=1574.4)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1663934636707-168ae620-205d-4a5f-8b78-27bfe9faeed5.png#clientId=uf7186fc9-316d-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=384&id=u57928a13&margin=%5Bobject%20Object%5D&name=image.png&originHeight=480&originWidth=497&originalType=binary&ratio=1&rotation=0&showTitle=false&size=192112&status=error&style=none&taskId=ua61c8f11-f2b5-48ac-9438-3c30abdb780&title=&width=397.6)
4.将execl表中数据导入到country表中:
(1)将excel表格字段按照数据库中表的字段顺序整理数据,并保存为csv文件。
(2)用记事本打开csv文件,另存为UTF-8格式。
(3)给用户execl表的读写权限
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1663934713281-72d05203-2b98-4c48-b70b-29b60d4dc714.png#clientId=uf7186fc9-316d-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=344&id=u532a299e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=430&originWidth=1392&originalType=binary&ratio=1&rotation=0&showTitle=false&size=407294&status=error&style=none&taskId=u0809a9da-e637-4ce9-b707-992cf6f14cf&title=&width=1113.6)
5.Log errors:
(1)创建日志select copy_error_log_create();
(2)使用
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1663934815006-9556416e-dd6e-43e1-87a9-6de1c6d3aa9a.png#clientId=uf7186fc9-316d-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=481&id=u205d84c0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=601&originWidth=1855&originalType=binary&ratio=1&rotation=0&showTitle=false&size=545485&status=error&style=none&taskId=u9f182cfb-2b95-4d0a-8c2d-70b1e77cf82&title=&width=1484)
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1663934783615-4d2d203a-4a9a-4357-9f62-70c88943a032.png#clientId=uf7186fc9-316d-4&crop=0&crop=0&crop=1&crop=1&errorMessage=unknown%20error&from=paste&height=191&id=uf8955bb6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=239&originWidth=1832&originalType=binary&ratio=1&rotation=0&showTitle=false&size=411247&status=error&style=none&taskId=uc97f56e8-08e9-4c05-bb16-c3fede613a9&title=&width=1465.6)