PostgreSQL多表关联数据插入新建表的正确方法咨询
问题分析与解决方法
错误原因
- INSERT操作误用:INSERT的作用是添加新记录,而非修改已有记录。单独插入
Beschreibung字段时,数据库会生成全新的行(其他字段用默认值,比如ID自动递增),自然无法关联到之前插入的数据库信息行。 - 关联语句语法错误:你尝试的关联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
相关产品推荐
相关产品推荐

