postgresql是否支持lookbehind regexp?

时间:2011-08-03 07:50:51

标签: sql regex postgresql

如果是,请提供一个关于lookbehind或替代的例子。

我正在尝试在没有'

的情况下提取序列名称
select table_name,
       column_name,
       regexp_replace(substring(column_default from '''.*(?='')'),'''','','g') as sequence
FROM information_schema.columns 

2 个答案:

答案 0 :(得分:8)

最后我检查过它在sql级别不支持它,但如果绝对必要,你可以使用plperl解决限制。 (重复regexing通常不属于DB级别,但是......)

在您的特定示例中,请考虑使用否定类:[^'](根据需要转义)或non-greedy wildcard: .*?

除此之外,您需要手动创建序列,其名称将始终为:

tablename_colname_seq

同样FWIW,如果您在应用中使用多个架构和搜索路径,则以下两个默认值具有不同的行为:

nextval('foo'::regclass)  -- find foo once
nextval('foo'::text)      -- find foo each time

答案 1 :(得分:4)

从9.6开始,它确实接受使用(?<=re),文档here的正面观察。