在数据库的测试实验中,我们竟成需要通过循环进行基本的功能验证测试,在 Oracle 中通过 for ... Loop 循环,同样可以在 openGauss 中实现。
首先构建一个测试表:
postgres=# create table enmo as select row_number() OVER (ORDER BY name) id ,name from pg_settings;
INSERT 0 542
postgres=# select * from enmo where id < 10;
id | name
----+--------------------------------
1 | DateStyle
2 | FencedUDFMemoryLimit
3 | IntervalStyle
4 | RepOriginId
5 | TimeZone
6 | UDFWorkerMemHardLimit
7 | acce_min_datasize_per_thread
8 | acceleration_with_compute_pool
9 | advance_xlog_file_num
(9 rows)
创建一个包含一定功能的 Loop 函数:
postgres=# create or replace function enmoloop(em1 integer[],em2 bigint) returns
postgres-# void AS $$
postgres$# declare ini integer;
postgres$# declare num integer;
postgres$# begin
postgres$# ini :=1;
postgres$# num = 1;
postgres$# for ini in 1..em2 loop
postgres$# UPDATE enmo SET id=em1[num] + 2020 WHERE id = ini;
postgres$# num = num +1;
postgres$# if (num>6) then
postgres$# num = 1;
postgres$# end if;
postgres$# end loop;
postgres$# end;
postgres$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
调用这个函数:
postgres=# select enmoloop(array[1,4,5,6,7,8],1000);
enmoloop
----------
(1 row)
检查数据情况:
postgres=# select * from enmo where id < 10;
id | name
----+------
(0 rows)
postgres=# select * from enmo where id < 2022;
id | name
------+---------------------------------
2021 | DateStyle
2021 | acce_min_datasize_per_thread
2021 | allow_concurrent_tuple_update
2021 | archive_timeout
2021 | audit_dml_state
2021 | audit_grant_revoke
2021 | audit_space_limit
2021 | autoanalyze
2021 | autovacuum_io_limits
...
在 openGauss 和 Oracle 的上手实践中,对于 DBA 们事实上,是非常友好的。