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

时间:2016-09-01 15:08:43

标签: postgresql replace psql

我的问题如下:

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

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

问题:对于此数据库中的每条记录,我想删除所有表格中只包含一个连字符的所有字符串(作者,期刊文章,书籍专着......)和列(性别,副标题,补充......)。像“伪名称 - 早年”这样的字符串不应该改变。 记录应该像这样改变:

  

作者:“Altmann” - > “Altmann”,标题:“伪标题” - > “伪标题”,副标题:“ - ” - > “”

我该怎么做?

提前致谢,

Telefonmann

2 个答案:

答案 0 :(得分:1)

尝试使用函数来隐藏所有表,并对模式中的每个表重复查询:

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;

答案 1 :(得分:0)

请参阅String Functions and Operators

其中一个变种:

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