postgress 存储过程新增或更新数据

本文详细介绍了一种使用SQL进行数据同步的方法,包括如何通过LEFT JOIN和INNER JOIN操作来区分新数据和更新数据,进而实现数据的高效更新和插入。具体展示了在特定条件下,如何设置和更新报告时间字段,适用于数据库维护和数据同步场景。

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

思路:

新增:拿新数据对比旧数据,用left join , 新数据 left join 旧数据  where 旧数据id is null;

更新的数据:拿 新数据对比旧数据,用INNER JOIN, 新数据 INNER JOIN 旧数据  where 条件

然后就去更新或者插入数据了,

INSERT INTOadvertisement.adv_images_play_record aaipr 
            SET report_time = datar.report_time_new
            FROM
                (
                SELECT
                    aai.ID,
                    aa.report_time_new
                FROM
                    (
                    SELECT 
                        to_timestamp( report_time, 'yyyy-MM-dd hh24:mi:ss' ) AS report_time_new 
                    FROM
                        json_to_recordset ( _s_json_parms:: json ) AS A ( report_time TEXT ) 
                    ) AS aa
                    LEFT JOIN advertisement.adv_images_play_record aai ON aa.report_time_new = aai.report_time_new 
                ) datar 
            WHERE
                aaipr.ID = datar.ID;

 

UPDATE advertisement.adv_images_play_record aaipr 
            SET report_time = datar.report_time_new
            FROM
                (
                SELECT
                    aai.ID,
                    aa.report_time_new
                FROM
                    (
                    SELECT 
                        to_timestamp( report_time, 'yyyy-MM-dd hh24:mi:ss' ) AS report_time_new 
                    FROM
                        json_to_recordset ( _s_json_parms:: json ) AS A ( report_time TEXT ) 
                    ) AS aa
                    INNER JOIN advertisement.adv_images_play_record aai ON aa.report_time_new = aai.report_time_new 
                ) datar 
            WHERE
                aaipr.ID = datar.ID;

 

 

 

### 配置和管理PostgreSQL中的多数据源 在Spring Boot应用程序中配置多个PostgreSQL数据源涉及几个关键步骤。这不仅需要调整应用层面的配置,还需要确保数据库连接池和其他必要的依赖被正确引入。 #### 添加Maven依赖 为了支持与PostgreSQL的数据交互,在`pom.xml`文件中应加入特定于PostgreSQL的JDBC驱动程序以及JSON处理工具: ```xml <!-- 数据库驱动 --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> <!-- JSON包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` 上述代码片段展示了如何通过Maven来添加所需的外部库[^3]。 #### 应用属性配置 接着,在`application.properties``application.yml`文件内定义不同数据源的具体参数。这里给出基于YAML格式的一个例子: ```yaml spring: datasource: primary: url: jdbc:postgresql://localhost:5432/db1 username: user1 password: pass1 driver-class-name: org.postgresql.Driver secondary: url: jdbc:postgresql://localhost:5432/db2 username: user2 password: pass2 driver-class-name: org.postgresql.Driver ``` 此部分用于指定各个数据源的位置及其认证信息。 #### 创建自定义配置类 对于每一个额外的数据源,都需要创建相应的配置类以便能够独立管理和操作这些资源。下面是一个针对次要数据源(`secondary`)的例子: ```java @Configuration public class SecondaryDataSourceConfig { @Bean(name = "secondaryDataSource") @ConfigurationProperties(prefix="spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } } ``` 这段Java代码说明了怎样为第二个数据源建立专门的配置对象,并将其注册到Spring容器里。 #### 使用@Primary注解区分默认数据源 当存在多个同类型的bean时,默认情况下Spring会抛出异常提示无法决定哪一个作为首选项。为了避免这种情况发生,可以在主要数据源上加上`@Primary`标记,从而明确指出哪个应该优先考虑: ```java @Bean(name = "primaryDataSource") @Primary @ConfigurationProperties(prefix="spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } ``` 这样就完成了基本的多数据源设定过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值