解锁 7 大技巧,避免你的 Postgres 挂掉

PostgreSQL update set from 两表联合更新 update t_business tb set system_id = ir.application_id from t_business_irregular ir where tb.affected_business = ir.application_name update t_business tb set system_id = ir.application_id from t_business_irregular ir where tb.fault_system = ir.applicatio 阅读详情

永远不要添加带默认值的列

从 PostgreSQL 11 开始,添加带默认值的列不再重写表。本博文中的其他提示仍然有效!

PostgreSQL 的黄金法则是:在生产中向表添加列时,千万不要指定默认值。

添加列会对表加上锁,从而阻塞读写。如果添加的列有默认值,PostgreSQL 会重写整个表,为每一行填写默认值,这对大型表来说可能需要数小时。在此期间,所有查询都会阻塞,数据库将不可用。

不要这样做:

-- 阻塞读写一直到完全重写(以小时计)
ALTER TABLE items ADD COLUMN last_update timestamptz DEFAULT now();

改用这个方法:

-- 阻塞查询,更新,插入,删除直到 catalog 被更新 (毫秒计)
ALTER TABLE items ADD COLUMN last_update timestamptz;
-- 查询,插入可以执行,一些更新和删除在重写表时,会被阻塞
UPDATE items SET last_update = now();

或者更好的办法是,通过小批量更新来避免长时间阻塞更新和删除,例如:

do {
  numRowsUpdated = executeUpdate(
    "UPDATE items SET last_update = ? " +
    "WHERE ctid IN (SELECT ctid FROM items WHERE last_update IS NULL LIMIT 5000)",
    now);
} while (numRowsUpdate > 0);

这样,您就可以在尽量不影响用户的情况下添加和填充新列。

译者按

在 Bytebase 中对应的是这条 SQL 审核规则:

file

当心锁队列,使用 lock timeouts(锁超时)

在 PostgreSQL 中,每个锁都有一个队列。如果事务 B 试图获取一个已经被事务 A 持有的有冲突的锁,那么事务 B 将会在锁队列中等待。现在有趣的是:如果另一个事务 C 加入,它不仅需要检查与事务 A 的冲突,还需要检查与事务 B 以及锁队列中其他所有事务的冲突。

这意味着即使你的 DDL 命令可以非常快速地运行,它也可能在队列中等待很长时间,因为需要等待其他查询完成,并且在它之后启动的查询将会被它阻塞。

如果表上可能长时间运行 SELECT 查询,就不要这样做:

ALTER TABLE items ADD COLUMN last_update timestamptz;

而应该这样做:

SET lock_timeout TO '2s'
ALTER TABLE items ADD COLUMN last_update timestamptz;

通过设置 lock_timeout 参数,如果 DDL 命令因为等待锁而阻塞查询超过 2 秒,该命令将会失败。这样做的缺点是 ALTER TABLE 可能不会成功,但可以稍后再试。在开始 DDL 命令之前,建议先查询 pg_stat_activity,查看是否有长时间运行的查询。

CONCURRENTLY(并行地)创建索引

PostgreSQL 的另一条黄金法则是:始终并行地创建索引。
在大型数据集上创建索引可能需要数小时甚至数天,而常规的 CREATE INDEX 命令会在命令执行期间阻止所有写入操作。虽然不会阻塞 SELECT,但这仍然很糟糕,而且还有更好的方法:CREATE INDEX CONCURRENTLY。
不要这样做:

-- 阻塞所有写
CREATE INDEX items_value_idx ON items USING GIN (value jsonb_path_ops);

而应这样做:

-- 只阻塞其他 DDL 操作
CREATE INDEX CONCURRENTLY items_value_idx ON items USING GIN (value jsonb_path_ops);

并发地创建索引有一个缺点。如果出了问题,它不会回滚,而是留下一个未完成(invalid)的索引。如果出现这种情况,不用担心,只需运行 DROP INDEX CONCURRENTLY items_value_idx,然后再尝试创建一次即可。

译者按

在 Bytebase 中对应的是这条 SQL 审核规则:

file

尽可能晚地获取高级别的锁

当需要运行命令获取表上高级别的锁时,应尽量在事务的较晚阶段执行,以允许查询尽可能长时间地进行。

例如,如果要完全替换表的内容。不要这样做:

BEGIN;
-- 阻塞读写:
TRUNCATE items;
-- 长时间操作:
\COPY items FROM 'newdata.csv' WITH CSV 
COMMIT;

取而代之的是,将数据加载到新表中,然后替换旧表:

BEGIN;
CREATE TABLE items_new (LIKE items INCLUDING ALL);
-- 长时间操作:
\COPY items_new FROM 'newdata.csv' WITH CSV
-- 阻塞读写:
DROP TABLE items;
ALTER TABLE items_new RENAME TO items;
COMMIT;

有一个问题,我们没有从一开始就阻止写入,因此当我们删除旧的 items 表时,它可能已经发生了变化。为了防止出现这种情况,我们可以显式锁表,阻止写入,但不阻止读取:

BEGIN;
LOCK items IN EXCLUSIVE MODE;
...

有时,自己动手加锁更为保险。

添加主键并尽量减少加锁

在表中添加主键通常是个好主意。例如,当你想使用逻辑复制迁移数据库时。

Postgres 让使用 ALTER TABLE 创建主键变得非常简单,但在为主键建立索引的过程中(如果表很大,可能需要很长时间),所有查询都会被阻塞。

ALTER TABLE items ADD PRIMARY KEY (id); -- 长时间阻塞查询

幸运的是,你可以先使用 CREATE UNIQUE INDEX CONCURRENTLY 完成所有繁重的工作,然后使用唯一索引作为主键,这是一种快速操作。

CREATE UNIQUE INDEX CONCURRENTLY items_pk ON items (id); -- 会很长,但不会阻塞查询
ALTER TABLE items ADD CONSTRAINT items_pk PRIMARY KEY USING INDEX items_pk;  -- 会阻塞查询,但很快

通过将创建主键分解为两个步骤,几乎不会对用户造成影响。

永远不要使用 VACUUM FULL

Postgres 的用户体验有时会让人吃惊。虽然 VACUUM FULL 听起来像是清除数据库灰尘的命令,但更合适的命令应该是:请冻结我的数据库数小时。

PLEASE FREEZE MY DATABASE FOR HOURS;

VACUUM FULL 会将整个表重写到磁盘上,这可能需要数小时或数天的时间,并且在重写过程中会阻止所有查询。虽然 VACUUM FULL 有一些有效的使用情况,例如表以前很大,但现在变小了,仍占用大量空间,但这极可能不是你面临的情况。

虽然你应该调整 AUTO VACUUM 设置并使用索引来加快查询速度,但你可能有时需要运行 VACUUM,而不是 VACUUM FULL。

通过重排指令避免死锁

如果你已经使用 PostgreSQL 有一段时间了,你很可能见过类似的错误:

ERROR:  deadlock detected
DETAIL:  Process 13661 waits for ShareLock on transaction 45942; blocked by process 13483.
Process 13483 waits for ShareLock on transaction 45937; blocked by process 13661.

当并发事务以不同顺序获取相同锁时,就会出现这种情况。例如,一个事务发出以下命令。

BEGIN;
UPDATE items SET counter = counter + 1 WHERE key = 'hello'; -- 在 hello 上加锁
UPDATE items SET counter = counter + 1 WHERE key = 'world'; -- 一边阻塞 hello,一边等着 world
END;

与此同时,另一个事务可能会发出相同的命令,但顺序不同。

BEGIN
UPDATE items SET counter = counter + 1 WHERE key = 'world'; -- 在 world 上加锁
UPDATE items SET counter = counter + 1 WHERE key = 'hello';  -- 一边阻塞 world,一边等着 hello
END;

如果这些事务同时运行,它们很可能会互相卡住,永远无法完成。Postgres 会在一秒钟左右后识别出这种情况,并取消其中一个事务,让另一个事务完成。出现这种情况时,你应该检查一下自己的应用程序,看看能否让事务始终按照相同的顺序进行。如果两个事务都先修改 hello,再修改 world,那么第一个事务就会在抢到其他锁之前阻塞第二个事务的 hello 锁。

希望这些建议对您有所帮助。如果您有什么建议,请随时留言!

译者按

优秀的数据库仍然需要「正确」的使用姿势,但是人工检查总会疏漏。好在 Bytebase 落地了 SQL 审核(并在社区版本中全面开放),将规范强制为约束,自动化检查每一条 SQL,为团队安全使用数据库保驾护航。🛡️🎉


💡 更多资讯,请关注 Bytebase 公号:Bytebase

PostgreSQL源码分析——UPDATE 本文主要描述SQL中UPDATE语句的源码分析,代码为PG13.3版本。以 这条最简单的Update语句进行源码分析(dtea不是分区表,不考虑并行等,没有建立任何索引),帮助我们理解update的大致流程。SQL流程如下:对应的代码: 解析部分——生成语法解析树UpdateStmt 关键数据结构:、、: 用户输入的update语句 由字符串会转为可由数据库理解的内部数据结构语法解析树 。执行逻辑在 中,需要理解flex与bison。gram.y中Update语法的定义: 解析部分——生成查询树Query 阅读详情

相关推荐

Ubuntu 20.04 源码编译安装 PostgreSQL 15.7 实战指南

PostgreSQL 是一款支持 ACID、MVCC 和 JSONB 的开源关系型数据库,其核心价值在于强一致性、可扩展的扩展生态(如 pgvector、TimescaleDB)及企业级运维能力。理解其安装原理,关键在于掌握版本兼容性、系统级依赖(如 ICU、OpenSSL)、locale 配置与 systemd 服务集成机制。在 Ubuntu 20.04 这类 LTS 系统中,APT 默认提供的 PostgreSQL 12 已终止安全支持,而源码编译可精准控制 ICU 支持、LDAP 认证和 WAL 压缩

weixin_33951761的博客 402

update set的两种使用方法

创建数据表 --create database study; use study; create table S( SNO varchar(20) primary key not null, SNAME varchar(20) not null, SEX varchar(10), DEPT varchar(20), BIRTH datetime ); create table C(...

jiuweideqixu的博客 4万+

Asciinema:从入门到精通,解锁终端录屏的进阶玩法

本文全面介绍Asciinema终端录屏工具的使用技巧,从基础安装到进阶玩法,包括脚本化录制、自建服务器、与企业工作流集成等实用场景。通过详细的代码示例和实战经验,帮助开发者高效记录和分享命令行操作,提升技术文档的互动性和可操作性。

weixin_42519781的博客 358

数据的更新(update的用法)笔记

应用场景:使用 INSERT 语句向表中插入数据之后,有时却想要再更改数据,例如“将商品销售单价登记错了”等的时候,并不需要把数据删除之后再重新插入,使用 UPDATE 语句就可以改变表中的数据。 一、UPDATE 语句的基本语法 语法结构: update(表名) set (列名)=表达式 where (条件) 更新完成后可通过运行Select语句检验更新结果 二、用法 1、Null 清空 使用 UPDATE 语句可以将值清空为 NULL(但只限于未设置 NOT NULL 约束的列)。例:

newway22的博客 3万+

ValheimPlus模组配置指南:10个核心技巧优化英灵神殿游戏体验

在游戏模组开发领域,社区模组通过扩展游戏原生功能,为玩家提供个性化定制体验,其技术原理主要基于游戏运行时框架(如BepInEx)进行功能注入与配置管理。这类技术能显著提升游戏的可玩性与用户粘性,尤其适用于生存建造类游戏,通过优化资源管理、建造效率等核心痛点来增强玩家沉浸感。ValheimPlus作为《英灵神殿》的知名优化模组,正是这一理念的典型实践,它通过模块化配置系统,允许玩家精细调整物品堆叠、建造精度、技能成长等参数,在保留游戏原版挑战性的同时,大幅减少重复性操作负担,适用于单人深度体验或多人服务器协作

weixin_30588675的博客 515

Ubuntu 20.04 PostgreSQL安装失败真相:从命令执行到psql可用的完整链路

PostgreSQL 是一款功能完备的开源关系型数据库,其核心原理在于客户端-服务端分离架构与基于角色的细粒度访问控制。技术价值体现在事务一致性、扩展性及生态工具链(如 psql、pg_dump、pg_createcluster)的高度成熟。典型应用场景涵盖本地开发调试、Docker 容器集成、Web 应用后端数据服务及轻量级生产部署。然而在 Ubuntu 20.04 系统中,因元包机制、集群未初始化、peer 认证默认策略等设计特性,导致大量用户遭遇 'psql command not found' 或

weixin_30325487的博客 483

mysql中如何更新数据库_MySQL数据库如何使用update set语句更新数据表

UPDATE 更新UPDATE SET 语法用于修改更新数据表中的数据。语法:UPDATEtb_nameSETcolumn1=new_value1,column2=new_value2,…WHEREdefinition该语法将数据表中符合 WHERE 条件的记录中的 column1 的值更新为 new_value1,column2 的值更新为new_value2 ,以此类推。如果...

weixin_39863371的博客 4017

保姆级教程:用Docker在CentOS 7.6上部署VASTBASE G100 V2.2.10数据库(附Navicat连接避坑指南)

在国产数据库技术快速发展的今天,VASTBASE G100作为一款高性能的关系型数据库,正受到越来越多企业的关注。对于刚接触这款产品的技术人员来说,如何在Linux系统中快速搭建一个可用的开发测试环境,往往是项目落地的第一步。Docker的安装是部署的第一步。注意:VASTBASE容器默认使用UID 1000的用户运行,直接使用vastbase系统用户可能导致权限问题。以下是经过验证的可靠连接方法。提示:如果是在虚拟机中部署,建议为系统分配至少2个vCPU和8GB内存,特别是当需要运行多个容器时。

一名菜鸟攻城师 397

【PGCCC】解锁 7 大技巧,避免你的 Postgres 挂掉

现在有趣的是:如果另一个事务 C 加入,它不仅需要检查与事务 A 的冲突,还需要检查与事务 B 以及锁队列中其他所有事务的冲突。虽然 VACUUM FULL 有一些有效的使用情况,例如表以前很大,但现在变小了,仍占用大量空间,但这极可能不是你面临的情况。如果添加的列有默认值,PostgreSQL 会重写整个表,为每一行填写默认值,这对大型表来说可能需要数小时。这意味着即使你的 DDL 命令可以非常快速地运行,它也可能在队列中等待很长时间,因为需要等待其他查询完成,并且在它之后启动的查询将会被它阻塞。

PGCCC的博客 1080

【实战】驾驭n8n:构建企业级自动化中枢,解锁AI工作流新范式

本文深入探讨如何利用n8n构建企业级自动化中枢,解锁AI工作流新范式。通过实战案例分享高可用架构设计、安全合规实践及团队协作创新,展示n8n在提升开发效率和业务自动化方面的强大能力,特别强调其与AI技术的结合如何重塑企业数字化转型路径。

weixin_28829903的博客 445

android usb读写,安卓(Android)下如何开发USB NFC读写器app

对安卓工程师来说,在安卓下使用USB设备需要了解很多硬件的内容,这可能会导致工程周期的延长或者app的不稳定。为了将这种风险降到最低,友我科技发布了NFC读写器在安卓下的sdk,使用NFC读写器的类接口,安卓工程师就可以直接调用NFC读写器了,简单可靠。NFC读写器的安卓库文件为:yoworfidreader.jar在ADT工程中导入yoworfidreader.jar库文件,即可在工程中引用NF...

weixin_36433781的博客 827

在树莓派上解锁Docker超能力:从零到一的ARM架构容器化实战指南

想象一下,你的树莓派不再只是一个简单的单板计算机,而是一个能够运行现代化应用、管理微服务架构的迷你数据中心。这就是Docker为树莓派带来的魔力!作为容器化技术的核心引擎,Docker Engine让ARM架构的树莓派也能享受与服务器相同的开发部署体验。 ## 为什么树莓派需要Docker?三大核心价值解析 ### 1. 开发环境一致性:告别"在我机器上能运行"的魔咒 树莓派常被用作IoT设备

gitblog_00645的博客 281

IMU数据处理避坑指南:从理论到实践的加速度计重力消除方案

本文详细解析了IMU数据处理中的重力消除技术,从理论基础到实践应用,涵盖了加速度计和陀螺仪的核心问题。通过ROS2实战案例,介绍了静态标定与动态校准的技术对比,以及多传感器融合的进阶策略,帮助开发者避免常见陷阱,提升IMU数据处理的精度和效率。

purple的博客 741

Spirula Studio 跨厂商更新:任意显卡跑 3DGS

Spirula Studio 是一款免 Python 环境的 3D Gaussian Splatting(3DGS,三维高斯泼溅)训练工具。本轮更新让它摆脱了对 NVIDIA 显卡的依赖,把 3DGS 训练、稀疏重建到网格化做成了单文件全流程。 ## 能力速览 | 以前 | 现在 | 谁受益 | |---|---|---| | 只有 NVIDIA 显卡能跑 | 跨厂商 Vulkan 后端,AM

gitblog_00318的博客 785

Protobuf NDK以及QNX交叉编译

Protobuf 用处很广,尤其是通讯数据序列化,反序列化。TODO。

静虚待令,有物混成 1560

LVGL项目内存告急?试试把中文字库放到SD卡里(基于LvglFontTool V0.5)

本文详细介绍了在LVGL嵌入式项目中如何通过将中文字库存储到SD卡来优化内存使用。针对Flash资源有限的MCU,如STM32F103,提供了基于LvglFontTool V0.5的外部字库生成与动态加载方案,适用于多字号、多语言及OTA场景,显著减少固件体积并提升显示灵活性。

weixin_33726318的博客 457

解锁AI编程助手潜力:8个必装Skill提升开发效率

在AI驱动的软件开发领域,提示工程(Prompt Engineering)是连接自然语言指令与高质量代码生成的核心技术。其原理在于通过精心设计的提示词,引导大语言模型理解开发者的意图,并输出符合特定规范、可执行的代码片段。这项技术的核心价值在于将通用的代码补全能力,转化为解决特定领域问题的专家级助手,从而显著降低开发门槛,提升工程效率。在实际应用场景中,开发者常面临项目脚手架搭建、数据库脚本生成、API接口开发、测试用例编写等重复性任务,这正是AI编程技能(AI Programming Skills)大显身

weixin_30780649的博客 428

【C语言】程序员筑基功法——《函数栈帧的创建与销毁》

汇编角度带你走进函数栈帧

StackFrame 3666

【愚公系列】2023年09月 .NET CORE工具案例-DistributedLock的分布式锁

锁是一种同步机制,用于在多线程或多进程环境中对共享资源进行互斥访问,从而避免竞争条件和数据不一致问题。分布式锁是一种在分布式系统中实现互斥访问的锁,允许多个进程或节点使用同一个锁来协调它们的操作。分布式锁通常使用分布式协议来确保锁的一致性和可靠性,例如 ZooKeeper、Redis 等。分布式锁的应用场景包括高并发下的数据更新、分布式任务调度、分布式事务等。

愚公智库 3万+

EML 全面实践指南:把 SAP RAP 业务对象玩出工程化的稳定与优雅

本文面向掌握ABAP基础、正在实施RAP的开发者,深入讲解EML(Entity Manipulation Language)的核心用法。文章围绕READ ENTITIES、MODIFY ENTITIES、COMMIT ENTITIES三大语句,详细解析其语义、类型体系、事务机制及工程实践。重点内容包括:字段裁剪、派生类型、草稿控制、批量更新、事务缓冲与保存序列等关键技术点,并配合真实案例代码。旨在帮助开发者在SAP ABAP On-Premise和BTP环境中构建可维护、可演进的业务对象访问层,同时避免常见

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 332

博途PLC信号处理系列之卡尔曼滤波程序(Kalman Filter)

三菱系列PLC的卡尔曼滤波程序,可以参看下面这篇博文PLC滤波算法之卡尔曼滤波(kalmanFilter)代码+测试_RXXW_Dor的博客-优快云博客_plc滤波kalman滤波是采用递归的方法解决线性滤波问题,只需要当前的测量值input(西门子PLC里比如我们的模拟量通道AIW0值)和前一个采样周期的估计值(上一个时刻的滤波输出结果last_out)就能进行状态估计,需要的存储空间小,每一步的计算量小。下面我们通过程序代码一一给大家展示下。注意。......

RXXW_Dor的博客 3476

轻量级锁实现3——上锁、释放

从底层理解轻量级锁的实现,从保护共享内存的角度理解轻量级锁的使用场景,包括上锁、等待、释放,理解轻量级锁的互斥(execlusive)和共享(shared)2种状态。

HighGO 718

【DRAM存储器二】Sense Amplifier

详述DRAM颗粒中感应放大器功能、电路结构、工作原理和操作波形

highman110的博客 7207

AI服务生产部署:异步架构、容器化与性能优化实战

在构建高并发AI应用服务时,异步任务队列是解决同步阻塞问题的核心技术方案。其原理在于解耦请求接收与任务处理,通过消息队列实现任务的可靠分发与结果回传,从而提升系统吞吐量与资源利用率。这一架构模式的技术价值在于支持弹性伸缩、增强服务可靠性,并能编排复杂AI工作流。在实际应用场景中,结合容器化部署与GPU资源管理,可确保AI模型从实验环境平稳过渡到生产环境。本文聚焦于AI服务后端开发,深入探讨了异步处理、生产部署等关键环节,为开发者提供从架构设计到性能优化的完整工程实践指南。

weixin_30628801的博客 762

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Dify备份策略深度解析:为什么你的恢复总是失败?

掌握Dify备份与恢复数据方法,解决恢复失败难题。适用于私有化部署与多环境迁移,涵盖自动备份、版本控制与完整性校验等核心策略,确保数据安全可靠。高效稳定,运维无忧,值得收藏。

InstrWander的博客 583

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

5分钟快速部署:零代码企业数据协作平台Teable终极指南

想要摆脱传统电子表格的局限,寻找一个真正适合团队协作的数据管理平台吗?面对数据孤岛、协作困难、版本混乱的痛点,Teable作为一款开源无代码数据协作平台,为您提供企业级数据管理解决方案。本文将带您通过5个简单步骤,快速搭建属于自己的数据协作平台,实现数据驱动的高效团队协作。 ## 问题发现:传统数据管理为何阻碍团队效率? 在数字化协作时代,许多团队仍在使用传统的电子表格管理业务数据,这导致了一

gitblog_00850的博客 1067

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 如何给你的产品挑选域名
下一篇: Bytebase 2.19.0 - 支持 DynamoDB
Bytebase
博客等级 码龄5年 1349粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值