On 25-08-2015 18:33, Everton Berz wrote:
> Segue abaixo a demonstração do parâmetro não-permitido na tabela que me
> referi no primeiro e-mail. 
> 
> xxx=# \d+ client.tb_hash_session
>                                                           Table
> "client.tb_hash_session"
>      Column      |            Type             |                      
>  Modifiers                         | Storage  | Stats target | Description
> -----------------+-----------------------------+----------------------------------------------------------+----------+--------------+-------------
>  id_hash_session | integer                     | not null default
> nextval('sq_tb_hash_session'::regclass) | plain    |              |
> ...
> Has OIDs: no
> Options: autovacuum_enabled=true, autovacuum_analyze_scale_factor=0.001,
> autovacuum_analyze_threshold=1, autovacuum_vacuum_scale_factor=0.003,
> autovacuum_vacuum_threshold=3, autovacuum_vacuum_cost_delay=3,
> *toast.autovacuum_analyze_scale_factor*=0.001,
> toast.autovacuum_analyze_threshold=1,
> toast.autovacuum_vacuum_scale_factor=0.003,
> toast.autovacuum_vacuum_threshold=3, toast.autovacuum_vacuum_cost_delay=3
> 

Nesse caso o seu catálogo deve ter sido alterado diretamente. Um
"update" na "pg_class" setando a coluna "reloptions" pode fazer isso. Já
vi muito isso ser feito porque o "ALTER TABLE ... SET (...)" exige um
AccessExclusiveLock até a 9.5. Felizmente para a 9.6 relaxamos o nível
de lock [1] para setar propriedades de autovacuum.

Para te ajudar segue uma pequena PL para "remover" do catálogo um
reloption de uma relação:

CREATE OR REPLACE FUNCTION del_reloption(relid OID, option TEXT)
RETURNS TEXT[] AS
$$
DECLARE
    options TEXT[];
    new_options TEXT[];
BEGIN
    SELECT reloptions
    INTO   options
    FROM   pg_class
    WHERE  oid = relid
    FOR UPDATE;

    IF options IS NULL THEN
        RETURN NULL;
    END IF;

    FOR i IN 1..array_upper(options, 1)
    LOOP
        IF option IS DISTINCT FROM trim(split_part(options[i], '=', 1)) THEN
            new_options := array_append(new_options, options[i]);
       END IF;
    END LOOP;

    UPDATE pg_class
    SET    reloptions = new_options
    WHERE  oid = relid;

    RETURN new_options;
END;
$$
LANGUAGE plpgsql;


Para utilizar a PL acima basta:

SELECT del_reloption('tb_hash_session'::regclass,
'toast.autovacuum_analyze_scale_factor');


E caso vc queira "varrer todas" suas tabelas pode também:

SELECT del_reloption(relid, 'toast.autovacuum_analyze_scale_factor')
  FROM pg_stat_user_tables;


Espero ter ajudado...

Att,

Ps: o patch em [1] foi financiado por uma empresa brasileira
(http://zenvia.com.br) e também desenvolvido por um brasileiro.


[1]
http://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=47167b7907a802ed39b179c8780b76359468f076

-- 
   Fabrízio de Royes Mello         Timbira - http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a