TDSQL-PG创建测试表并定时插入数据模拟生产

TDSQL-PG创建测试表并定时插入数据模拟生产

复制代码
-- 创建 t_customer 表
CREATE TABLE t_customer (
    id SERIAL PRIMARY KEY,
    customer_code VARCHAR(50) NOT NULL,
    customer_name VARCHAR(100) NOT NULL,
    age INTEGER,
    city VARCHAR(50),
    status VARCHAR(20) DEFAULT 'ACTIVE',
    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 添加注释
COMMENT ON TABLE t_customer IS '客户表';
COMMENT ON COLUMN t_customer.id IS '主键ID';
COMMENT ON COLUMN t_customer.customer_code IS '客户编码';
COMMENT ON COLUMN t_customer.customer_name IS '客户名称';
COMMENT ON COLUMN t_customer.age IS '年龄';
COMMENT ON COLUMN t_customer.city IS '城市';
COMMENT ON COLUMN t_customer.status IS '状态:ACTIVE/INACTIVE';
COMMENT ON COLUMN t_customer.create_time IS '创建时间';
COMMENT ON COLUMN t_customer.update_time IS '更新时间';


-- 创建插入数据的函数(修正数组访问语法)
CREATE OR REPLACE FUNCTION insert_batch_customer()
RETURNS INTEGER AS $$
DECLARE
    i INTEGER;
    v_count INTEGER;
    v_cities TEXT[];
BEGIN
    -- 定义城市数组
    v_cities := ARRAY['北京', '上海', '广州', '深圳', '杭州', '成都', '武汉', '西安'];
    
    -- 获取当前表记录数作为起始编号
    SELECT COALESCE(MAX(id), 0) INTO v_count FROM t_customer;
    
    -- 循环插入10条数据
    FOR i IN 1..10 LOOP
        INSERT INTO t_customer (
            customer_code,
            customer_name,
            age,
            city,
            status,
            create_time,
            update_time
        ) VALUES (
            'CUST_' || TO_CHAR(NOW(), 'YYYYMMDDHH24MISS') || '_' || LPAD((v_count + i)::TEXT, 6, '0'),
            '客户_' || (v_count + i),
            18 + FLOOR(RANDOM() * 50)::INTEGER,
            v_cities[FLOOR(RANDOM() * array_length(v_cities, 1)) + 1],
            CASE WHEN RANDOM() > 0.2 THEN 'ACTIVE' ELSE 'INACTIVE' END,
            NOW(),
            NOW()
        );
    END LOOP;
    
    RETURN 10;
END;
$$ LANGUAGE plpgsql;

-- 测试函数
SELECT insert_batch_customer();

-- 查询插入的数据
SELECT * FROM t_customer ORDER BY id DESC LIMIT 20;


-- 创建定时任务(需要 pg_cron 扩展)
-- 方法1:使用 pg_cron 扩展(推荐)
CREATE EXTENSION IF NOT EXISTS pg_cron;

-- 每隔5分钟执行一次插入任务
SELECT cron.schedule(
    'insert-customer-job',           -- 任务名称
    '*/5 * * * *',                   -- cron表达式:每5分钟
    'SELECT insert_batch_customer()' -- 执行的SQL
);


-- 2. 更新任务的数据库字段
UPDATE cron.job SET database = 'rsyncdb' WHERE jobname = 'insert-customer-job';

-- 3. 验证配置
-- 查看已创建的定时任务
SELECT * FROM cron.job;

-- 删除定时任务(如需要)
-- SELECT cron.unschedule('insert-customer-job');

-- 方法2:如果不支持 pg_cron,可以使用 pgAgent
-- 需要在 pgAgent 中创建作业,步骤配置为:
-- SELECT insert_batch_customer();

-- 方法3:使用 Linux crontab + psql 命令
-- 在 crontab 中添加:
-- */5 * * * * psql -U username -d dbname -c "SELECT insert_batch_customer();"

-- 手动测试插入函数
-- SELECT insert_batch_customer();

-- 查询插入的数据
SELECT * FROM t_customer ORDER BY id DESC LIMIT 20;

-- 创建索引优化查询
CREATE INDEX idx_customer_code ON t_customer(customer_code);
CREATE INDEX idx_customer_status ON t_customer(status);
CREATE INDEX idx_create_time ON t_customer(create_time);

--查看定时任务执行历史
select * from cron.job_run_details ;
相关推荐
Elastic 中国社区官方博客7 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
红海云8 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba8 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭8 小时前
达梦事物特性及MVCC
linux·运维·数据库
福兮说9 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
小马同学-9 小时前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang9 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
郑州光合科技余经理9 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
geovindu10 小时前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
小呆呆66610 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试