改变工作方式的 PostgreSQL 实用模式

Postgresql 模式简析. 1.模式(schema)的定义:模式(schema)是数据库的一个概念,可以理解为数据库中一个命名空间或者目录(但不可以嵌套),不同的模式下可以有相同名字表、函数、视图等对象且互相不冲突.提出模式的概念是为了管理数据库里面的对象,只要有足够的权限,每个模式的对象可以互相调用.允许使用模式的三个主要原因:(1) 允许多个用户同时使用一个数据库系统彼此互相不收干扰.(2)把数据库对象放在不同的模式下,... 阅读详情

在使用 PostgreSQL 数据库的过程中,有一组实践方式可以显著提升开发与协作体验。单个做法影响有限,但叠加起来效果十分明显。

使用 UUID 作为主键

UUID 确实存在一些缺点:

  • 完全随机的 UUID 无法自然排序,对索引有一定影响
  • 相比自增 ID 占用更多存储空间(而存储通常是成本最低的资源)

但 UUID 的优势远大于缺点:

  • 生成 UUID 无需与数据库协调
  • 可以安全地对外公开和传递
CREATE TABLE person(
    id uuid not null default gen_random_uuid() primary key,
    name text not null
)

为所有表添加 created_at 和 updated_at 字段

虽然无法完整记录历史变更,但记录创建时间和最后更新时间,在排查问题时是非常有价值的线索。同时,这类信息一旦未记录,事后无法补救,只能通过预先记录获取。

因此,建议所有表统一包含 created_at 与 updated_at 字段,并通过触发器自动维护 updated_at 字段。

CREATE TABLE person(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    name text not null
);

CREATE FUNCTION set_current_timestamp_updated_at()
    RETURNS TRIGGER AS $$
DECLARE
_new record;
BEGIN
  _new := NEW;
  _new."updated_at" = now();
RETURN _new;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER set_person_updated_at
    BEFORE UPDATE ON person
    FOR EACH ROW
    EXECUTE PROCEDURE set_current_timestamp_updated_at();

注:每个数据表都需创建对应的触发器,但上述函数仅需创建一次。

外键约束设置 ON UPDATE RESTRICT 和 ON DELETE RESTRICT

该设置可避免删除被引用行时导致的数据丢失,若尝试删除被引用的行,系统会直接抛出错误。存储空间成本低廉,而数据恢复过程则极为繁琐,因此抛出错误比级联删除更合理。

CREATE TABLE person(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    name text not null
);

CREATE TABLE pet(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    name text not null,
    owner_id uuid not null references person(id)
                on update restrict
                on delete restrict
);

使用 Schema 进行逻辑分区

默认情况下,所有表都会创建在 public schema 中。该方式虽可行,但未利用自定义模式的能力会造成功能浪费。

Schema 可作为表的逻辑命名空间,适用于中大型应用。跨 schema 的关联与查询完全可行,几乎没有额外成本。

CREATE SCHEMA vet;

CREATE TABLE vet.person(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    name text not null
);

CREATE TABLE vet.pet(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    name text not null,
    owner_id uuid not null references vet.person(id)
                on update restrict
                on delete restrict
);

使用“枚举表”而非枚举类型

SQL 中定义枚举的方式很多,例如枚举类型或 CHECK 约束。一个更灵活的做法是使用“枚举表”。

即:使用一张表存放允许的取值,其他表通过外键引用。

CREATE TABLE vet.pet_kind(
    value text not null primary key
);

INSERT INTO vet.pet_kind(value)
VALUES ('dog'), ('cat'), ('bird');

CREATE TABLE vet.pet(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    owner_id uuid not null references vet.person(id)
                on update restrict
                on delete restrict,
    kind text not null references vet.pet_kind(value)
                on update restrict
                on delete restrict
);

这样不仅可以随时扩展取值,还可以为每个值附加说明等元数据:

CREATE TABLE vet.pet_kind(
    value text not null primary key,
    comment text not null default ''
);

INSERT INTO vet.pet_kind(value, comment)
VALUES
    ('dog', 'A Canine'),
    ('cat', 'A Feline'),
    ('bird', 'A 50 Year Commitment');

CREATE TABLE vet.pet(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    owner_id uuid not null references vet.person(id)
                on update restrict
                on delete restrict,
    kind text not null references vet.pet_kind(value)
                on update restrict
                on delete restrict
);

数据表命名使用单数形式

表名建议统一使用名词单数形式。虽然 SELECT * FROM pets 看起来更自然,但在复杂查询中,实际操作的是“单行数据”。

SELECT *
FROM pet
-- It's a cruel coincidence that in english an "s"
-- suffix can sometimes work both as a plural
-- and a possessive, but notice how the where clause
-- is asserting a condition about a single row.
WHERE pet.name = 'sally'

使用复数形式命名数据表会引发诸多边缘问题,数据表名称应与表中单行数据所代表的实体保持一致。

关联表采用机械化命名规则

用于建立数据多对多关系的 “连接表” 有时可使用语义化名称,但多数情况下无合适的语义化名称,此时可直接拼接所关联表的名称作为连接表名。

CREATE TABLE vet.person(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now()
);

CREATE TABLE vet.pet(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now()
);

-- pet_owner would work in this context, but
-- I just want to demonstrate the table_a_table_b naming scheme
CREATE TABLE vet.person_pet(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    person_id uuid not null references vet.person(id)
                on update restrict
                on delete restrict,
    pet_id uuid not null references vet.pet(id)
                on update restrict
                on delete restrict
);

CREATE UNIQUE INDEX ON vet.person_pet(person_id, pet_id);

优先使用软删除

再次强调:存储便宜,数据恢复困难。

如需标记数据失效,使用可为空的 timestamptz 字段比直接删除更安全:

  • 有时间戳:表示删除或失效时间
  • 为 NULL:表示仍然有效
CREATE TABLE vet.prescription(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    pet_id uuid not null references vet.pet(id)
             on update restrict
             on delete restrict,
    issued_at timestamptz not null,
    -- Instead of deleting a prescription,
    -- explicitly mark when it was revoked
    revoked_at timestamptz
);

相比布尔值,时间戳通常更有价值,因为不仅表示“是否发生”,还能表示“何时发生”。

将状态表示为日志形式

将状态表示为单一字段(如 submitted → approved)存在两个问题:

  • 无法准确记录状态发生的时间或来源
  • 状态更新可能以乱序形式接收(例如 Webhook 场景)

应对该问题的方式是创建状态日志表,每行记录代表某一时间点的实体状态。不应复用 created_at 或 updated_at 字段,需新增显式的 valid_at 字段标记状态生效时间。

CREATE TABLE vet.adoption_approval_status(
    value text not null primary key
);

INSERT INTO vet.adoption_approval_status(value)
VALUES ('submitted'), ('in_review'), ('rejected'), ('approved');

CREATE TABLE vet.adoption_approval(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    person_id uuid not null references vet.person(id)
                on update restrict
                on delete restrict,
    status text not null references vet.adoption_approval_status(value)
                on update restrict
                on delete restrict,
    valid_at timestamptz not null
);

CREATE INDEX ON vet.adoption_approval(person_id, valid_at DESC);

仅对 valid_at 字段建立索引在短期内有效,但查询性能最终会下降。最优解决方案是新增 latest 布尔字段,配合唯一索引和触发器,确保仅有 valid_at 最新的行标记为最新状态:

CREATE TABLE vet.adoption_approval(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    person_id uuid not null references vet.person(id)
                on update restrict
                on delete restrict,
    status text not null references vet.adoption_approval_status(value)
                on update restrict
                on delete restrict,
    valid_at timestamptz not null,
    latest boolean default false
);

CREATE INDEX ON vet.adoption_approval(person_id, valid_at DESC);

-- Conditional unique index makes sure we only have one latest
CREATE UNIQUE INDEX ON vet.adoption_approval(person_id, latest)
WHERE latest = true;

-- Then a trigger to keep latest up to date
CREATE OR REPLACE FUNCTION vet.set_adoption_approval_latest()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$
BEGIN
    UPDATE vet.adoption_approval
    SET latest = false
    WHERE latest = true and person_id = NEW.person_id;

    UPDATE vet.adoption_approval
    SET latest = true
    WHERE id = (
        SELECT id
        FROM vet.adoption_approval
        WHERE person_id = NEW.person_id
        ORDER BY valid_at DESC
        LIMIT 1
    );

    RETURN null;
END;
$function$;

CREATE TRIGGER adoption_approval_insert_trigger
    AFTER INSERT ON vet.adoption_approval
    FOR EACH ROW
    EXECUTE FUNCTION vet.set_adoption_approval_latest();

为特殊行标记 system_id

系统中常存在“特殊行”,例如用于系统行为配置或固定逻辑依赖的记录。

可通过 system_id 字段进行标识,并对其创建唯一索引。多个 NULL 不会冲突,因此对普通数据无影响。

CREATE TABLE vet.contact_info(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    person_id uuid references vet.person(id)
                on update restrict
                on delete restrict,
    mailing_address text not null,
    system_id text
);

CREATE UNIQUE INDEX ON vet.contact_info(system_id);

-- Not hard to imagine wanting to build functionality that
-- automatically contacts the CDC for cases of rabies or similar,
-- but maybe every other bit of contact_info in the system is
-- for more "normal" purposes
INSERT INTO vet.contact_info(system_id, mailing_address)
VALUES ('cdc', '4770 Buford Highway, NE');

谨慎使用视图

视图在封装复杂查询时非常有用,但也存在明显问题:

  • 删除字段需要重建视图
  • 视图嵌套会迅速失控
  • 查询规划器对视图的优化能力有限

建议仅在必要时使用,并避免“视图套视图”。

CREATE TABLE vet.prescription(
    id uuid not null default gen_random_uuid() primary key,
    created_at timestamptz not null default now(),
    updated_at timestamptz not null default now(),
    pet_id uuid not null references vet.pet(id)
             on update restrict
             on delete restrict,
    issued_at timestamptz not null,
    -- Instead of deleting a prescription,
    -- explicitly mark when it was revoked
    revoked_at timestamptz
);

CREATE INDEX ON vet.prescription(revoked_at);

-- There are pros and cons to having this view
CREATE VIEW vet.active_prescription AS
    SELECT
        vet.prescription.id,
        vet.prescription.created_at,
        vet.prescription.updated_at,
        vet.prescription.pet_id,
        vet.prescription.issued_at
    FROM
        vet.prescription
    WHERE
        vet.prescription.revoked_at IS NULL;

使用 JSON 查询

PostgreSQL 对 JSON 的支持不仅体现在存储,更体现在查询结果构造上。

将 JSON 作为查询结果格式能发挥更大价值。该方式虽存在缺点(丢失类型信息、需一次性获取结果、JSON 序列化存在性能开销),但核心优势是可通过单次数据库请求获取所需全部信息,避免笛卡尔积问题和 N+1 查询问题。

SELECT jsonb_build_object(
  'id', vet.person.id,
  'name', vet.person.name,
  'pets', array(
    SELECT jsonb_build_object(
      'id', vet.pet.id,
      'name', vet.pet.name,
      'prescriptions', array(
        SELECT jsonb_build_object(
          'issued_at', vet.prescription.issued_at
        )
        FROM vet.prescription
        WHERE vet.prescription.pet_id = vet.pet.id
      )
    )
    FROM vet.person_pet
    LEFT JOIN vet.pet
      ON vet.pet.id = vet.person_pet.pet_id
    WHERE vet.person_pet.person_id = vet.person.id
  ),
  'contact_infos', array(
    SELECT jsonb_build_object(
      'mailing_address', vet.contact_info.mailing_address
    )
    FROM vet.contact_info
    WHERE vet.contact_info.person_id = vet.person.id
  )
)
FROM vet.person
WHERE id = '29168a93-cd14-478f-8c70-a2b7a782c714';

上述查询可返回如下格式的结果:

{
  "id": "29168a93-cd14-478f-8c70-a2b7a782c714",
  "name": "Jeff Computers",
  "pets": [
    {
      "id": "3e5557c0-c628-44ef-b4d1-86012c5f48bf",
      "name": "Rhodie",
      "prescriptions": [
        {
          "issued_at": "2025-03-11T23:46:18.345146+00:00"
        }
      ]
    },
    {
      "id": "ed63ca7d-3368-4353-9747-6b6b2fa6657a",
      "name": "Jenny",
      "prescriptions": []
    }
  ],
  "contact_infos": [
    {
      "mailing_address": "123 Sesame St."
    }
  ]
}

结语

综合来看,这些 PostgreSQL 设计模式并不追求“炫技”,而是围绕真实业务场景中反复踩过的坑给出的务实解法。它们关注长期维护、数据安全与系统演进成本,强调在一开始就做出对未来友好的选择。随着业务规模扩大,这些看似细微的设计习惯,往往会成为系统稳定性与开发效率的分水岭。

原文链接:https://mccue.dev/pages/3-11-25-life-altering-postgresql-patterns

作者:Ethan McCue


HOW 2026 议题招募中

2026 年 4 月 27-28 日,由 IvorySQL 社区联合 PGEU(欧洲 PG 社区)、PGAsia(亚洲 PG 社区)共同打造的 HOW 2026(IvorySQL & PostgreSQL 技术峰会) 将再度落地济南。届时,PostgreSQL 联合创始人 Bruce Momjian 等顶级大师将亲临现场。

自开启征集以来,HOW 2026 筹备组已感受到来自全球 PostgreSQL 爱好者的澎湃热情。为了确保大会议题的深度与广度,我们诚邀您在 2026 年 2 月 27 日截止日期前,提交您的技术见解。

投递链接:https://jsj.top/f/uebqBc

PostgreSQL 公共模式(public schema)完全指南 公共模式(public schema)是 PostgreSQL 数据库中默认存在的特殊模式。当创建一个新的 PostgreSQL 数据库时,系统会自动创建一个名为 "public" 的模式。 public 模式的主要作用是为用户提供一个开箱即用的工作环境,特别是在开发和测试阶段,用户可以快速创建和访问数据库对象而无需额外的权限配置。 阅读详情

相关推荐

【PostgreSQL教程】PostgreSQL 模式(SCHEMA)

PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。 一个模式可以包含视图、索引、数据类型、函数和操作符等。 相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。 使用模式的优势: - 允许多个用户使用一个数据库并且不会互相干扰。 - 将数据库对象组织成逻辑组以便更容易管理。 - 第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。 模式类似于操作系统层的目录,但是模式不能嵌套。

No8g攻城狮的博客 799

30个实用SQL语句,玩转PostgreSQL

PostgreSQL是一款功能非常强大的开源关系型数据库,它支持哈希索引、反向索引、部分索引、Expression 索引、GiST、GIN等多种索引模式,同时可安装功能丰富的扩展包。相较于Mysql,PostgreSQ支持通过PostGIS扩展支持地理空间数据、支持嵌套循环,哈希连接,排序合并三种表连接方式等一系列的强化功能。本文主要整理总结了30个实用SQL,方便大家可以高效利用PostgreSQL。

3069

ANSYS Workbench瞬态结构分析(1)时域分析

本文围绕瞬态结构分析展开。首先阐释其概念与理论基础,涵盖控制方程及数值求解方法。接着详述在 ANSYS Workbench 中进行瞬态分析的操作流程,以音叉为例,介绍从创建分析系统、材料定义、几何处理与网格划分,到边界条件与载荷设置、求解器设置及结果后处理的各步骤。之后对分析结果进行探讨,并针对计算不收敛、计算时间过长等常见问题给出调试技巧,旨在为读者提供全面的瞬态结构分析知识与实践指导。

qq_58675332的博客 6532

PostgreSql 模式

模式(Schema)是数据库中的一个概念,可以将其理解为一个命名空间或目录,不同的模式下可以有相同名称的表、函数等对象而不会产生冲突。提出模式的概念是为了便于管理,只要有权限,各个模式的对象可以互相调用。在 PostgreSQL 中,一个数据库包含一个或多个模式,模式中又包含了表、函数以及操作符等数据库对象。

脑子进水养啥鱼?的博客 2507

离散系统傅里叶变换的常用结论证明

本文介绍了离散系统傅里叶变换的三个重要结论:1)时域卷积对应频域相乘(公式1-3);2)时域相乘对应频域卷积(公式4-6);3)帕塞瓦尔定理(公式7)及其广义形式,证明信号能量在变换域保持不变。文末提供了MATLAB卷积运算演示程序,通过动画展示离散信号卷积过程(翻转、平移、相乘、累加),并以方波信号为例给出运行结果图。该程序直观呈现了卷积运算的步骤与结果。

newtton的博客 1306

petalinux i2c的配置

1.硬件平台配置 1.内核配置 cd petalinux-config -c kernel -> Device Drivers -> I2C support -> i2C Hardware Bus support -> Xilinx I2C Controller Pressing 启用CONFIG_I2C_XILINX=y 2.修改用户设备树 cd cd project-spec/meta-user/recipes-bsp/device-tree/files/ i2c2:

u013403954的博客 4314

【PostgreSQL】模式Schema

PostgreSQL 数据库集群包含一个或多个命名数据库。角色和一些其他对象类型在整个集群中共享。与服务器的客户端连接只能访问单个数据库中的数据,该数据库在连接请求中指定。数据库包含一个或多个命名schema,而这些schema又包含表。schema还包含其他类型的命名对象,包括数据类型、函数和运算符。相同的对象名称可以在不同的架构中使用而不会发生冲突;例如,both 和myschema可以包含名为mytable的表。

圈小圈DBA的博客 1712

【推荐100个unity插件】unity实现交互式火焰 —— Ignis

Ignis是一款Unity互动式消防系统插件,可轻松将物体转换为可燃物。支持固体、植被、蒙皮网格和地形树木等多种对象类型,提供火焰蔓延、熄灭等效果。安装需通过Unity Package Manager添加Visual Effects Graph,并按照指引转换目标物体材质。使用盒型碰撞体或网格计算燃烧区域,可自定义火焰参数和视觉效果。内置多种转换选项,如Flammable Vegetation、Flammable Skinned Mesh等,适用于不同场景需求。注意使用前需备份材质和地形数据,并提供性能优化

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2241

PostgreSQL 中的模式是什么

在 PostgreSQL 中,“模式”(Schema)是用于逻辑组织数据库对象(如表、视图、函数等)的一种机制。它可以理解为数据库中的“文件夹”或“命名空间”,用于将不同的对象分组管理。

weixin_44594317的博客 1754

基于STM32L4XX、HAL库的AD7124-8BCPZ模数转换器ADC驱动程序设计

/ 公式: Voltage = (adc_value / (2^23 - 1)) * Vref。// 模式控制位[7:5]=000 (连续转换模式)// 3.2 配置通道0,使其使用AIN0(+)和AIN1(-),并关联到配置0和滤波器0。= 0x14) { // AD7124-8的ID是0x14。// 双极性操作,缓冲AINP/AINN。

zhusl6688的博客 377

YOLO26科研升级:BiFPN双向特征金字塔,让多尺度特征融合精度再突破

在目录下,新建AddModules文件夹,将bifpn.py放入其中。

LXY_LOVE36的博客 559

PostgreSQL 模式(Schema)详解

摘要:PostgreSQL模式(Schema)是数据库对象的逻辑容器,用于组织管理表、视图等对象,避免命名冲突并提供权限隔离。核心功能包括:多用户共享数据库时通过不同模式区分同名对象;按业务模块分组管理;通过权限控制实现数据安全。常用操作涵盖创建、查询、修改和删除模式,以及权限管理(USAGE和CREATE权限)。最佳实践建议按业务拆分模式、遵循最小权限原则,并禁用public模式的默认创建权限。模式作为命名空间管理工具,与物理存储的表空间(Tablespace)互为补充,共同构建清晰的数据库架构。(150

best_virtuoso的博客 2341

基于百度地图API在AI Studio上的卫星地图块图像处理与分类

本项目基于百度地图API获取了不同的瓦片地图并进行合并等处理,可用于遥感和抽象地图的地图块的图像分类、分割、检测等数据的制作。瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的地理范围不变。首先确定地图服务平台所要提供的缩放级别的数量N,把缩放级别最高、地图比例尺最大的地图图片作为金字塔的底层,即第0层,并对其进行分块,从地图图片的左上角开始,从左至右、从上到下进行切割,分割成相同大小(比如256x256像素)的正方形地图瓦片,形成第0层瓦片矩阵;

斌擎科技 747

PostgreSQL 模式介绍_postgresql public

如果在搜索路径中没有匹配表,那么就报告一个错误,即使匹配表的名字在数据库其它的模式中存在也如此。通常情况下,创建和访问表的时候都不用指定模式,实际上这时访问的都是“public”模式。下面我们将要介绍另外一种方式,即通过role对象,直接登录并关联到myschema对象,之后便可以在myschema模式下直接创建各种所需的对象了。为了让用户使用模式中的对象,我们可能需要赋予额外的权限, 只要是适合该对象的。所以一般情况下,若创建的表默认没有指定模式,那都会在“public”模式下。

2401_85613869的博客 1055

核心组件大换血:Backbone与Neck魔改篇:YOLO26魔改Neck:引入BiFPN(双向特征金字塔),多尺度融合能力飙升

本文深入解析了YOLO26目标检测模型中Neck部分的优化策略,重点探讨了BiFPN(双向特征金字塔网络)的原理与实现。文章首先指出YOLO26原生FPN+PAN结构在多尺度特征融合上的局限性,特别是在小目标检测和边缘部署场景中的性能瓶颈。随后系统梳理了Neck网络的演进历程,从FPN、PANet到BiFPN和ASFF,详细对比了各架构的特点。核心部分展示了如何将BiFPN引入YOLO26,包括可学习权重融合、双向跨尺度连接等关键技术实现,并提供了PyTorch代码示例。本文为需要提升小目标检测性能或优化边

ZDQ58818的博客 247

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

PostgreSQL 模式

PostgreSQL 是一种功能强大的开源对象关系数据库管理系统(ORDBMS),它以其可靠性、健壮性和支持高级功能而闻名。在 PostgreSQL 中,模式(schema)是一个重要的概念,它用于组织和管理数据库中的对象,如表格、视图、索引等。模式可以看作是数据库内部的一个命名空间,它允许在同一数据库中存储多个应用程序的数据,同时保持数据的独立性。

lly202406的博客 788

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

PostgreSQL中的模式[schema]

postgresql数据库中的模式,以及如何选择。

坚持自己的梦想 1704

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

postgreSQL的实用程序

postgreSQL的实用程序: (1)用户实用程序: createdb 创建一个新的PostgreSQL的数据库(和SQL语句:CREATE DATABASE 相同) createuser 创建一个新的PostgreSQL的用户(和SQL语句:CREATE USER 相同) dropdb 删除数据库 dropuser 删除用户 pg_dump 将PostgreSQL数

荏苒夕阳的博客 561

postgresql 默认模式顺序和改变

postgresql有模式(schema)的概念,其实就是在数据库中划分范围,也就是在不同的模式中,可以有同名的表。可以简单理解为文件系统。   常用的默认模式是public。 SHOW search_path;显示现有的模式搜寻顺序,具体的顺序,也可以通过SET search_path TO 'schema_name'来修改顺序。 这样的修改只能在当前连接中有效,如果需要长久生效可以为

yangbaba2000的专栏 5581

PostgreSQL模式(schema)介绍

PostgreSQL模式(schema)介绍 一个PostgreSQL数据库集群包含一个或多个已命名数据库。用户和用户组在整个集群范围内是共享的,但是其它数据并不共享。任何与服务器连接的客户都只能访问那个在连接请求里声明的数据库。 注意: 集群中的用户并不一定要有访问集群内所有数据库的权限。共享用户名的意思是不能有重名用户。假定同一个集群里有两个数据库和一个joe用户,系统可以配置成只允许joe 访问其中的一个数据库。 一个数据库包含一个或多个已命名的模式,模式又包含表。模式还可以包含其它对象,包括数据类型

weixin_44691107的博客 8187

PostgreSQL模式详解

一个GP数据库包含一个或多个命名的schema,schmea包含表,其它命名的对象,包括数据类型、函数,以及操作符。同一个对象名可以在不同的模式里使用而不会导致冲突; 比如,schema1和myschema都可以包含叫做mytable的表。和数据库不同,模式不是严格分离的:一个用户可以访问他所连接的数据库中的任意模式中的对象,只要他有权限。     我们需要模式有以下几个主要原因:     1

qq_31943653的博客 3984

PostgreSQL学习总结(6)—— PostgreSQL 模式(SCHEMA)详解

前言 PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。一个模式可以包含视图、索引、数据类型、函数和操作符等。相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。模式类似于操作系统层的目录,但是模式不能嵌套。一个PostgreSQL数据库集群包含一个或多个已命名数据库。用户和用户组在整个集群范围内是共享的,但是其它数据并不共享。任何与服务器连接的客户都只能访问那个在连接请求里声明的数据库。 注意: 集群中的

科技D人生 4589

PostgreSQL 模式(SCHEMA)

PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。一个模式可以包含视图、索引、数据类型、函数和操作符等。相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。使用模式的优势:允许多个用户使用一个数据库并且不会互相干扰。将数据库对象组织成逻辑组以便更容易管理。第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。模式类似于操作系统层的目录,但是模式不能嵌套。

candy662的博客 733

如何用phpPgAdmin提升PostgreSQL管理效率?10个实用技巧分享

PostgreSQL作为功能强大的开源关系数据库,在企业级应用中广泛使用。然而,对于许多开发者和数据库管理员来说,命令行操作PostgreSQL可能不够直观。这就是**phpPgAdmin**的用武之地——这是一款基于Web的PostgreSQL管理工具,能够显著提升数据库管理效率。本文将分享10个实用技巧,帮助您充分利用phpPgAdmin的强大功能。 ## 📊 什么是phpPgAdmin?

gitblog_00661的博客 1067

fast-lio2复现跑avia数据集

本文详细介绍了在Windows WSL2中安装Ubuntu 22.04并配置ROS2 Humble环境的全过程,涵盖系统初始化、ROS2安装、Livox雷达驱动编译及FAST-LIO2 ROS2版本的构建与验证。通过完整数据集回放与建图测试,成功实现点云地图生成与轨迹记录,并利用evo工具完成轨迹分析与可视化。最终输出包括累积点云地图、位姿轨迹及实验配置文件,为后续精度评估与复现提供基准。

chase_my_dream的博客 370
上一篇: 执行计划跑偏,你了解背后的根因吗?
下一篇: PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
IvorySQL
博客等级 码龄5年 745粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值