You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL多表关联数据插入新建表的正确方法咨询

问题分析与解决方法

错误原因

  1. INSERT操作误用:INSERT的作用是添加新记录,而非修改已有记录。单独插入Beschreibung字段时,数据库会生成全新的行(其他字段用默认值,比如ID自动递增),自然无法关联到之前插入的数据库信息行。
  2. 关联语句语法错误:你尝试的关联INSERT语句存在语法问题——INNER JOIN后未指定要关联的表(需明确关联DATENBANKEN表),且即便语法修正,INSERT仍会生成新行,无法实现更新已有数据的目的。

正确操作方法

方法一:一次性插入所有关联数据

若尚未执行第一次INSERT,或可清空DATENBANKEN表重新插入,建议直接关联pg_database和pg_shdescription,一次性插入所有字段数据:

CREATE TABLE DATENBANKEN (
    ID serial,
    name VARCHAR(20),
    Erstellt timestamp,
    Datenbankgröße VARCHAR(20),
    "Collation" VARCHAR (20),
    Beschreibung VARCHAR (50) 
);

INSERT INTO DATENBANKEN (id, name, Erstellt, Datenbankgröße, "Collation", Beschreibung)
SELECT 
    pg_database.oid,
    pg_database.datname,
    (pg_stat_file('base/'||pg_database.oid ||'/PG_VERSION')).modification,
    pg_size_pretty(pg_database_size(datname)),
    pg_database.datcollate,
    pg_shdescription.description
FROM pg_database
LEFT JOIN pg_shdescription ON pg_database.oid = pg_shdescription.objoid;

使用LEFT JOIN是为了保留无描述的数据库记录,避免遗漏。

方法二:更新已有记录填充描述字段

若已完成第一次INSERT,需补全Beschreibung字段,使用UPDATE语句而非INSERT:

UPDATE DATENBANKEN
SET Beschreibung = pg_shdescription.description
FROM pg_shdescription
WHERE DATENBANKEN.id = pg_shdescription.objoid;

该语句通过id(对应pg_database的oid)与pg_shdescription的objoid关联,将对应描述更新到已有行的Beschreibung字段中。

内容的提问来源于stack exchange,提问作者alaa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:45:54