=?UTF-8?Q?Johannes_Gra=c3=abn?= <johan...@selfnet.de> writes: > This is a minimal example that goes wrong (but shouldn't IMHO:
>> SELECT format('%L:1', '\:')::tsvector format(%L) is designed to produce a SQL literal, which does not have the same requirements as a tsvector element ... yeah, they're close, but not close enough. In this particular example, what you get is =# SELECT format('%L:1', '\:'); format ---------- E'\\:':1 (1 row) because format() adds an E prefix for the avoidance of doubt about what to do with the backslashes. tsvector doesn't like that. I don't think we have any prefab function that does what you're looking for here, and TBH I'm not sure I see the point of it. Pretty much any tsvector you'd be dealing with in practice is going to have come from one of the to_tsvector family of functions, and those tend to drop punctuation. > My understanding is that everything inside > single quotes is taken as a lexeme. From the documentation: >> To represent lexemes containing whitespace or punctuation, surround them >> with quotes See also the next bit about having to double quotes and backslashes within those quotes. So what you'd actually need is =# select $$'\\:':1$$::tsvector; tsvector ---------- '\\:':1 (1 row) If you write just one backslash, it has the effect of quoting the next character, which in this case doesn't need quoting. regards, tom lane