[firebase-br] Alterar tabelas do sistema no Firebird 3

Urias Gadelha uriasgadelha em redesoft.com.br
Qui Abr 23 16:09:55 -03 2020


Pessoal, vi que no firebird 3 as tabelas RDB$ são READ ONLY.

Eu fiz a recuperação de um banco que era FB2.5 porém, ao criar os metadados
do banco novo (FB 3.0), ele criou os BLOBS que era SUB_TYPE 1 como SUB_TYPE
0.

Já fiz o pump dos dados, e agora preciso alterar o SUB_TYPE dos BLOBS de 0
para 1.

No FB2.5 eu fiz isso através do update a seguir:

UPDATE RDB$FIELDS SET
RDB$FIELD_SUB_TYPE = 2
WHERE RDB$FIELD_NAME in (
select t1.RDB$FIELD_NAME FROM
RDB$FIELDS t1
join RDB$RELATION_FIELDS t2
on t1.RDB$FIELD_NAME = t2.RDB$FIELD_SOURCE
where t2.RDB$RELATION_NAME not CONTAINING '$'
and t1.RDB$FIELD_TYPE = 261)

e deu certo, Porém, no firebird 3.0 não consigo dar updates nas tabelas
RDB$.

Já tentei usar o seguinte comando:

alter table NOME_TABELA alter COLUMN NOME_CAMPO type BLOB sub_type 1

Porém no FB3 ele diz que não pode alterar o sub_type assim.


Já tentei procurar no RELEASE NOTE e achei o seguinte:

  User Privileges for Metadata Changes

Dmitry Yemanov with Roman Simakov

In Firebird 3, the system tables are read-only. This SQL syntax provides
the means to assign metadata write privileges to specified users or roles
for specified objects. See Tracker item CORE-735.

Note Some people have been applying the nickname “DDL privileges” to this
feature. Don't confuse it with “DDL triggers”! A more useful nickname would
be “Metadata privileges”. Syntax Patterns Granting metadata privileges:

 GRANT CREATE TO [USER | ROLE] | [WITH GRANT OPTION];
 GRANT ALTER ANY TO [USER | ROLE] | [WITH GRANT OPTION];
 GRANT DROP ANY TO [USER | ROLE] | [WITH GRANT OPTION];

Executei o comando: GRANT ALTER ANY TABLE TO SYSDBA;

porém ainda não tive sucesso...


Além de ter que criar uma nova coluna com um nome temporário com o tipo
certo, fazer um update e depois deletar a coluna antiga e renomear a nova
para o nome da antiga.


Observação: Fica inviável restaurar o banco antigo novamente, pois já está
no cliente e já contem dados atualizados.

Alguém sabe o que posso fazer?

É possível fazer um downgrade do FB3.0 para o 2.5 apenas com backup
restore, se eu não utilizei nada do FB3 no banco ainda?

Desde já agradeço a ajuda de vocês! :)
--



Mais detalhes sobre a lista de discussão lista