我需要将以下查询应用于60多个表:
UPDATE variable_table_name ab
SET elem_nr = ef.elem_nr
FROM ga_mit_elemnr ef
WHERE (ab.elem_nr NOT IN
(SELECT elem_nr
FROM strassenelemente cd)
OR ab.elem_nr IS NULL)
AND St_within(ab.geom, ef.geom)
在PostgreSQL中是否有一种自动化的方法?
答案 0 :(得分:0)
据我所知,不可能在Plain SQL中执行此操作,但是您可以使用PL / pgSQL在for循环中以动态命令的形式执行查询,并针对60多个表运行此查询。您可以在此处阅读有关Pl / pgSQL的信息:https://www.postgresql.org/docs/9.6/plpgsql.html
根据您的要求,您还可以使用其他编程语言(例如Python)以字符串形式动态执行SQL语句。
答案 1 :(得分:0)
了解此情况后,我建议使用postgres分区机制
即有一个主表和60多个分区,每个分区都将附加到主表,在ALTER TABLE
上,您仅更改主表架构,其余所有表也将更新
答案 2 :(得分:0)
这样的事情..
DECLARE @sql NVARCHAR(max)
SELECT @sql = N' '+ String_agg(Concat(N'
UPDATE ', CONVERT(NVARCHAR(max), Quotename(col_table_name)), N'
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];'), N'' + CHAR(13) + CHAR(13))
FROM information_schema.tables
WHERE [condition]
EXEC (@sql)
一旦获得查询,就可以使用SELECT
语句检查查询。
SELECT (@sql)
如果查询正常,则可以执行查询。
EXEC (@sql)
示例:https://data.stackexchange.com/stackoverflow/query/1011376/