如何用空字符串替换整个数据库中每个 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;
我的问题如下:
我有一个 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;