\set ON_ERROR_STOP 1 drop table if exists test_table cascade; psql:test.sql:3: NOTICE: drop cascades to view test_view DROP TABLE select version(); version ------------------------------------------------------------- PostgreSQL 9.3.5, compiled by Visual C++ build 1600, 64-bit (1 row) create temporary table test_table ( xxx varchar(32), expected varchar(32) ); CREATE TABLE insert into test_table values ('My Q Name', 'My Q Name' );; INSERT 0 1 insert into test_table values ('QMy Q Name', 'My Q Name' );; INSERT 0 1 insert into test_table values ('My Q NameQ', 'My Q Name' );; INSERT 0 1 insert into test_table values ('QMy Q NameQ', 'My Q Name' );; INSERT 0 1 insert into test_table values ('QQMy Q Name', 'QMy Q Name' );; INSERT 0 1 insert into test_table values ('My Q NameQQ', 'My Q NameQ' );; INSERT 0 1 insert into test_table values ('QQMy Q NameQQ', 'QMy Q NameQ' );; INSERT 0 1 -- Return sring xxx with first and last "Q" removed... create temporary view test_view as select xxx, expected, substring(xxx from 'Q?#"%#"Q?' FOR '#') as actual from test_table; CREATE VIEW select xxx,expected,actual,(actual <> expected) as error from test_view; xxx | expected | actual | error ---------------+-------------+--------------+------- My Q Name | My Q Name | My Q Name | f QMy Q Name | My Q Name | My Q Name | f My Q NameQ | My Q Name | My Q NameQ | t QMy Q NameQ | My Q Name | My Q NameQ | t QQMy Q Name | QMy Q Name | QMy Q Name | f My Q NameQQ | My Q NameQ | My Q NameQQ | t QQMy Q NameQQ | QMy Q NameQ | QMy Q NameQQ | t (7 rows) postgres=>