我有一个使用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已经完全填充,所以我可以说"numeric"类型不允许像我这样使用coalesce。我也尝试了下面这个但是没有成功:
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,'') || ' '...
^
我该如何绕过这个问题,而不必事先填充这两个空列呢?如果您有任何提示,我将不胜感激。谢谢!
numeric
列,而不是一个tsvector
列。此外,在 SQL 中引用大写的 TS 名称,需要使用双引号,例如"TS"
。 - Mike T