如何用空字符串替换整个数据库中每个 table + 列的每个记录中的单个字符?

How to replace a single character in every record for every table + column in the entire database with an empty string?

我的问题如下:

我有一个 1995 年左右开始的书目数据库,经过多次转换为不同的格式,最新的是 PSQL。由于自动转换和前人输入数据的不同风格,我有很多旧的注释技术的残余,现在不仅已经过时,而且还会污染数据库。

例如人们习惯于将空白信息记为“-”(连字符)而不是将其留空,这现在成为一个问题,因为我有很多条目的副标题被记录为“-”。

问题:对于这个数据库中的每条记录,我想删除所有表中只包含一个连字符的所有字符串(作者、期刊文章、书籍专着...)和列(性别,副标题,补充......)。 "Pseudo-title - the early years" 之类的字符串不应更改。 记录应该这样修改:

Author: "Altmann" -> "Altmann", Title: "Pseudo-title" -> "Pseudo-title", Subtitle: "-" -> ""

我该怎么做?

提前致谢,

Telefonmann

String Functions and Operators

变体之一:

UPDATE you_name_table SET Subtitle = '' WHERE trim(both ' ' from Subtitle) = '-';

尝试一个函数来转换您所有的 table,并对架构中的每个 table 重复查询:

CREATE OR REPLACE FUNCTION update_tables(schema IN VARCHAR) RETURNS void AS $$ 
DECLARE statements 
CURSOR FOR SELECT schemaname, tablename FROM pg_tables WHERE  schemaname = schema;
BEGIN FOR stmt IN statements LOOP EXECUTE 'UPDATE TABLE ' || quote_ident(stmt.schemaname) || '.' || quote_ident(stmt.tablename) || ' [put your query conditions here];';
        END LOOP;
    END; $$ LANGUAGE plpgsql;