Re: pg_upgrade 9.4 -> 9.5 with pg_trgm fails for me

Поиск
Список
Период
Сортировка
От Karsten Hilbert
Тема Re: pg_upgrade 9.4 -> 9.5 with pg_trgm fails for me
Дата
Msg-id 20160108163400.GO22446@hermes.hilbert.loc
обсуждение исходный текст
Ответ на Re: pg_upgrade 9.4 -> 9.5 with pg_trgm fails for me  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-general
On Fri, Jan 08, 2016 at 10:45:27AM -0500, Tom Lane wrote:

> > (For what it's worth, I have also tried the --method=dump way
> > of using Debian's pg_upgradecluster which internally uses a
> > dump/restore cycle rather than calling pg_upgrade. That
> > failed due to ordering problems with table data vs table
> > constraints.)
>
> That seems like an independent bug.  Can you provide specifics?

Attached the log of

    pg_upgradecluster -v 9.5 9.4 main &> pg-upgrade-9_4-9_5-dump_restore.log

and here is the function that leads to the schema having a
dependancy on table data:

    create or replace function gm.account_is_dbowner_or_staff(_account name)
        returns boolean
        language plpgsql
        as '
    DECLARE
        _is_owner boolean;
    BEGIN
        -- is _account member of current db group ?
    --    PERFORM 1 FROM pg_auth_members
    --    WHERE
    --        roleid = (SELECT oid FROM pg_roles WHERE rolname = current_database())
    --            AND
    --        member = (SELECT oid FROM pg_roles WHERE rolname = _account)
    --    ;
    --    IF FOUND THEN
    --        -- should catch people on staff, gm-dbo, and postgres
    --        RETURN TRUE;
    --    END IF;

        -- postgres
        IF _account = ''postgres'' THEN
            RETURN TRUE;
        END IF;

        -- on staff list
        PERFORM 1 FROM dem.staff WHERE db_user = _account;
        IF FOUND THEN
            RETURN TRUE;
        END IF;

        -- owner
        SELECT pg_catalog.pg_get_userbyid(datdba) = _account INTO STRICT _is_owner FROM pg_catalog.pg_database WHERE
datname= current_database(); 
        IF _is_owner IS TRUE THEN
            RETURN TRUE;
        END IF;

        -- neither
        RAISE EXCEPTION
            ''gm.account_is_dbowner_or_staff(NAME): <%> is neither database owner, nor <postgres>, nor on staff'',
_account
            USING ERRCODE = ''integrity_constraint_violation''
        ;
        RETURN FALSE;
    END;';

The function is used on audit tables:

    alter table audit.audit_fields
        drop constraint if exists
            audit_audit_fields_sane_modified_by cascade;

    alter table audit.audit_fields
        add constraint audit_audit_fields_sane_modified_by check
            (gm.account_is_dbowner_or_staff(modified_by) IS TRUE)
    ;

Karsten
--
GPG key ID E4071346 @ eu.pool.sks-keyservers.net
E167 67FD A291 2BEA 73BD  4537 78B9 A9F9 E407 1346

Вложения

В списке pgsql-general по дате отправления:

Предыдущее
От: Roland van Laar
Дата:
Сообщение: Re: Support for BDR in 9.5?
Следующее
От: Karsten Hilbert
Дата:
Сообщение: Re: pg_upgrade 9.4 -> 9.5 with pg_trgm fails for me