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
signature.asc
Description: OpenPGP digital signature
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
