更新范围类型的下限/上限

boo*_*biq 8 postgresql

我有tstzrange类型的列(带时区范围的时间戳),我只需更新此值的上限或下限(并保持包含/独占边界)

我设法改变了

(-infinity,infinity)
Run Code Online (Sandbox Code Playgroud)

同

UPDATE table
SET
    my_column = tstzrange(
        lower(my_column),
        now(),
        '()'
    )
Run Code Online (Sandbox Code Playgroud)

我有

(-infinity, <current timestamp>)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何保持边界从默认范围.这将改变甚至[ ]到( )

boo*_*biq 6

我找到了我错过的功能,可以这样做

UPDATE table
SET
    my_column = tstzrange(
        lower(my_column),
        now(),
        concat(
            CASE WHEN lower_inc(my_column) THEN '[' ELSE '(' END,
            CASE WHEN upper_inc(my_column) THEN ']' ELSE ')' END
        )
    )
Run Code Online (Sandbox Code Playgroud)

最好为此创建函数。还是有其他(简单/更好)的解决方案?