我有一个使用 NUMERIC 类型的包含三列的表。但是,其中两个什么都没有(即空的)。这是代码:
CREATE TABLE profiles(
ID SMALLINT,
FID SMALLINT,
SURVEY VARCHAR(100),
PROFILE VARCHAR(100),
TYPE VARCHAR(100),
SOURCE VARCHAR(100),
NR_TRACES NUMERIC,
TRACE_SPACE_M NUMERIC,
LENGTH_M NUMERIC,
IMAGES TEXT,
COMMENTS TEXT
);
ALTER TABLE profiles ADD ts tsvector;
UPDATE profiles SET ts = to_tsvector('english', ID || ' ' || FID || ' ' || coalesce(SURVEY,'') || ' ' || coalesce(PROFILE,'') || ' ' || coalesce(TYPE,'') || ' ' || coalesce(SOURCE,'') || ' ' || coalesce(NR_TRACES,'') || ' ' || coalesce(TRACE_SPACE_M,'') || ' ' || coalesce(LENGTH_M,'') || ' ' || coalesce(IMAGES,'') || ' ' || coalesce(COMMENTS,''));
鉴于我正在使用这两个列(NR_TRACES 和 TRACE_SPACE_M)更新我的 ts 列,因此不会填充 ts 列。我发现它是空的,因为我后来更新了两列:
UPDATE profiles SET nr_traces = 10131, trace_space_m = 12.5 WHERE PROFILE = '30';
并得到:
ERROR: invalid input syntax for type numeric: ""
和
ERROR: tsvector column "TS" does not exist
但是,LENGTH_M 列已完全填充,因此我可以说“数字”类型不允许以我使用它的方式合并。我也使用了下面的一个但没有成功:
coalesce(my-numeric-empty-column,'')
coalesce(my-numeric-empty-column,'')::numeric
如果我单独测试填充的 LENGTH_M 列,我会得到相同的指向“”(空)空间:
psql:profiles.sql:146: ERROR: invalid input syntax for type numeric: ""
LINE 1: ... ' ' || TRACE_SPACE_M || ' ' || coalesce(LENGTH_M,'') || ' '...
^
我怎样才能绕过这个而不首先填充这两个空列?
我会很感激这方面的任何提示,在此先感谢。