protocol buffer namespace conflict

针对于pb命名冲突,网上很多的解决办法都是无效的,而且大多数是无意义的转载,浪费大家解决问题的时间,这里把最标准的解决方案提供给大家。
实际上两种解决方案:
方案一:在编译的时候设置为警告,具体手段如下
go build -ldflags “-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=warn”
方案二:设置环境变量
GOLANG_PROTOBUF_REGISTRATION_CONFLICT=warn

我个人更推荐方案1.
本质没有什么区别,直接在Makefile加下就好。

至于为什么命名冲突我就不详解了,网上比较多可自行查阅,如果你得go版本比较新肯定会遇到这个问题。

### PostgreSQL 中 `ON CONFLICT` 子句的用法 在 PostgreSQL 中,`ON CONFLICT` 子句用于处理插入操作时遇到唯一约束冲突的情况。该特性允许指定当发生冲突时应采取的操作,而不是简单地中止事务。 #### 基本语法结构 ```sql INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...) ON CONFLICT target_action; ``` 其中 `target_action` 可以是: - **DO NOTHING**: 当发生冲突时不执行任何操作并继续下一个记录。 - **DO UPDATE SET ... WHERE ...**: 更新现有行中的某些列值,可以有条件地更新。 #### 使用示例 ##### 示例 1: 插入新数据或忽略重复键错误 假设有一个名为 `users` 的表,包含两列:`id` 和 `email`,并且 `id` 是主键。如果尝试插入具有相同 ID 的另一条记录,则会触发唯一性违反异常。通过使用 `ON CONFLICT DO NOTHING`,可以在不中断整个批处理的情况下跳过这些冲突项。 ```sql CREATE TABLE users ( id SERIAL PRIMARY KEY, email TEXT NOT NULL UNIQUE ); -- 尝试插入可能已存在的用户ID INSERT INTO users (id, email) VALUES (1, 'example@example.com') ON CONFLICT (id) DO NOTHING; -- 或者基于多个字段定义冲突目标 INSERT INTO users (id, email) VALUES (1, 'new-email@domain.org') ON CONFLICT (id, email) DO NOTHING; ``` ##### 示例 2: 上述基础上进行部分更新 除了完全忽略冲突外,还可以选择仅修改特定属性而不改变其他内容。这通常适用于想要保持最新状态的应用场景。 ```sql INSERT INTO users (id, email) VALUES (1, 'updated-email@test.net') ON CONFLICT (id) DO UPDATE SET email = EXCLUDED.email; ``` 这里的关键字 `EXCLUDED` 表达式表示试图被插入的新行;因此,在此上下文中它代表了传入的数据集。 #### 高级应用案例 对于更复杂的业务逻辑需求,比如根据条件决定如何响应冲突,可以通过添加额外的过滤器来实现更加精细控制的行为模式。 ```sql INSERT INTO inventory_items(item_id, quantity) VALUES ('A001', 5), ('B007', 8); ON CONFLICT (item_id) DO UPDATE SET quantity = inventory_items.quantity + excluded.quantity WHERE inventory_items.item_id = excluded.item_id AND inventory_items.quantity >= 0; ``` 上述例子展示了如何安全地增加库存数量而不会导致负数情况的发生[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值