openGauss或PostgreSQL生成多个库模式表数据

本文提供了一个bash脚本,演示如何使用PostgreSQL或openGauss创建多个数据库、模式和表,并插入预设数量的行数据。脚本通过用户交互来定制创建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PostgreSQL或openGauss生成多个数据库、模式、表、行

脚本

#!/bin/bash

db_type=PostgreSQL   #输入数据库类型 openGauss/PostgreSQL
db_user=test
db_port=5432


if [ $db_type == "openGauss" ];then
   app="gsql"
else
   app="psql"
fi


$app -d postgres -p $db_port -c "create user $db_user with password 'test@123';"

read -p '请输入想要创建的数据库的个数:' dbs
read -p '请输入每个数据库下要创建的schema的个数:' schs
read -p '请输入每个schema下要创建的表的个数:' tbs
read -p '请输入每个测试表数据的行数:' rows

for i in `seq 1 $dbs`
do
$app -d postgres -p $db_port -c "create database testdb$i with owner=$db_user;"
   for j in `seq 1 $schs`
   do
   $app -d testdb$i -p $db_port -c "create schema test_schema$j;"
      for k in `seq 1 $tbs`
	  do
	  $app -d testdb$i -p $db_port -c "create table test_schema$j.test_t$k(id int,col1 varchar(100));insert into test_schema$j.test_t$k select generate_series(1,$rows),substr(md5(random()::text),1,5);"
	  done
   done
done

执行演示

[pg12@pghost1 ~]$ vim 1.sh 
[pg12@pghost1 ~]$ 
[pg12@pghost1 ~]$ sh 1.sh 
CREATE ROLE
请输入想要创建的数据库的个数:2
请输入每个数据库下要创建的schema的个数:3
请输入每个schema下要创建的表的个数:4
请输入每个测试表数据的行数:10
CREATE DATABASE
CREATE SCHEMA
INSERT 0 10
INSERT 0 10
INSERT 0 10
INSERT 0 10
CREATE SCHEMA
INSERT 0 10
INSERT 0 10
INSERT 0 10
INSERT 0 10
CREATE SCHEMA
INSERT 0 10
INSERT 0 10
INSERT 0 10
INSERT 0 10
CREATE DATABASE
CREATE SCHEMA
INSERT 0 10
INSERT 0 10
INSERT 0 10
INSERT 0 10
CREATE SCHEMA
INSERT 0 10
INSERT 0 10
INSERT 0 10
INSERT 0 10
CREATE SCHEMA
INSERT 0 10
INSERT 0 10
INSERT 0 10
INSERT 0 10
[pg12@pghost1 ~]$ psql
psql (12.6)
Type "help" for help.

postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 testdb1   | test     | UTF8     | en_US.utf8 | en_US.utf8 | 
 testdb2   | test     | UTF8     | en_US.utf8 | en_US.utf8 | 
(5 rows)

postgres=# \c testdb1
You are now connected to database "testdb1" as user "postgres".
testdb1=# \dn
     List of schemas
     Name     |  Owner   
--------------+----------
 public       | postgres
 test_schema1 | postgres
 test_schema2 | postgres
 test_schema3 | postgres
(4 rows)

testdb1=# set search_path to test_schema1;
SET
testdb1=# 
testdb1=# \dt
             List of relations
    Schema    |  Name   | Type  |  Owner   
--------------+---------+-------+----------
 test_schema1 | test_t1 | table | postgres
 test_schema1 | test_t2 | table | postgres
 test_schema1 | test_t3 | table | postgres
 test_schema1 | test_t4 | table | postgres
(4 rows)

testdb1=# select count(*) from test_t1;
 count 
-------
    10
(1 row)

testdb1=# select *  from test_t1;
 id | col1  
----+-------
  1 | 8a375
  2 | 627fc
  3 | 32355
  4 | 0c9e9
  5 | be1d5
  6 | d93a0
  7 | c834e
  8 | 544c0
  9 | f1357
 10 | 3bf4f
(10 rows)

testdb1=# \q
[pg12@pghost1 ~]$ 
<think>嗯,用户问的是在OpenGauss数据库中给已经存在的数据增加几行数据。首先,我需要回忆一下OpenGauss数据操作语言,主要是SQL。插入数据通常用INSERT INTO语句,对吧? 那用户可能已经有一个结构了,比如叫table_name,里面有一些字段。需要确定用户是否知道的字段名和类型,者是否需要假设一个例子。可能应该先给出基本的INSERT语法,然后举例说明。 然后,用户可能想插入多行数据,而不仅仅是单行。这时候,可能需要提到在一条INSERT语句中插入多个值的情况,比如用VALUES后面跟多个括号,每个括号代一行数据。例如,INSERT INTO table (col1, col2) VALUES (val1, val2), (val3, val4); 这样的语法在OpenGauss中是否支持呢?是的,PostgreSQL支持,而OpenGauss基于PostgreSQL,所以应该也支持。 另外,用户可能需要考虑字段的顺序和是否允许空值。如果某些字段可以为空者有默认值,可能可以省略那些列。这时候应该提醒用户,如果省略某些列,要确保这些列确实可以为空者有默认值,否则会报错。 还有,是否需要提到使用子查询插入数据?比如INSERT INTO ... SELECT ... FROM ... 这样的语句?可能用户暂时不需要,但如果是高级用法,可以简单带过,但主要先解决基础的多行插入。 安全性方面,是否需要提醒SQL注入的问题?不过这是在应用层处理的事情,可能用户现在只是手动插入数据,暂时不需要深入。但如果是生成动态SQL的话,可能需要参数化查询,但这里可能不属于当前问题的范围。 另外,OpenGauss有没有什么特别的注意事项?比如权限问题,用户必须有INSERT权限才能执行该操作。者事务处理,默认情况下INSERT是在事务中自动提交的,除非显式地开启事务。这些可能需要提及,但用户可能已经了解这些基础概念。 还有,是否需要验证插入后的数据?比如执行SELECT语句查看是否成功插入。这可能是一个好的实践,可以建议用户插入后检查一下。 总结一下,回答的结构应该是先介绍INSERT语句的基本语法,然后给出单行插入的例子,再扩展到多行插入。同时,提醒注意事项,比如字段对应、默认值、权限等。最后可能给出一个完整的示例,从连接到数据库,到插入数据,再到查询验证。 需要确保使用正确的LaTeX格式,比如名用$table\_name$,字段用$column1, column2$,值用$value1, value2$等。独立公式可能用不到,但行内的数学达式需要注意用$...$包裹。 可能还需要提到INSERT的不同形式,比如插入所有列时可以省略列名,但明确指定列名更安全。另外,处理大量数据时,批量插入的效率问题,但用户的问题只是几行数据,可能不需要深入讨论批量操作。 最后,检查是否有语法错误,比如正确的关键字大写,逗号分隔,值列的正确格式等。确保示例中的符号正确,比如字符串用单引号,数字直接写,日期格式是否正确等。</think>在OpenGauss数据库中为已建立的数据增加数据,需使用SQL的`INSERT INTO`语句。以下是详细操作步骤及示例: --- ### 一、基本语法 ```sql INSERT INTO 名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...), (值1, 值2, 值3, ...), ...; ``` - **单行插入**:`VALUES`后跟一个括号包裹的数值 - **多行插入**:用逗号分隔多个括号组,每个括号代一行数据 --- ### 二、操作示例 假设已存在$student$,结构为: ```sql CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(20), age INT ); ``` #### 1. 插入单行数据 ```sql INSERT INTO student (id, name, age) VALUES (1, '张三', 18); ``` #### 2. 插入多行数据 ```sql INSERT INTO student (id, name, age) VALUES (2, '李四', 19), (3, '王五', 20), (4, '赵六', 21); ``` --- ### 三、注意事项 1. **列顺序匹配** 若省略列名,则需按定义的列顺序填写所有值: ```sql INSERT INTO student VALUES (5, '孙七', 22); ``` 2. **默认值与空值** - 若某列有默认值,可省略该列 - 若某列允许为`NULL`,可用`NULL`占位 示例: ```sql INSERT INTO student (id, name) -- 省略age列(假设允许NULL) VALUES (6, '周八'); ``` 3. **特殊数据类型** - 字符串需用单引号包裹,如`'张三'` - 日期类型需符合格式,如`'2023-10-01'` --- ### 四、验证插入结果 执行查询语句检查数据: ```sql SELECT * FROM student; ``` --- ### 五、性能建议 - **批量插入**:一次性插入多行数据效率高于逐行插入 - **事务控制**:大规模插入时显式使用事务(`BEGIN;` ... `COMMIT;`)提升性能 通过以上步骤即可安全地为数据添加新数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值