Skip to content

Instantly share code, notes, and snippets.

@kylefelipe
Created May 2, 2023 20:10
Show Gist options
  • Save kylefelipe/92545db3100d5ea937b9e220e101cba2 to your computer and use it in GitHub Desktop.
Save kylefelipe/92545db3100d5ea937b9e220e101cba2 to your computer and use it in GitHub Desktop.
Renomeando camadas em um geopackage

Renomear várias camadas em um geopackage

SELECT 
'ALTER TABLE '|| table_name || ' RENAME TO ''' || replace(table_name, '2021', '2020') ||''';'
FROM gpkg_geometry_columns
WHERE table_name like '%2021';

Esse SQL vai buscar os nomes das tabelas em gpkg_geometry_columns e criar o sql de renomeação para cada uma das tabelas que passarem no WHERE.
O replace vai mudar o texto do nome da tabela para o novo nome.

O resultado desse script pode ser passado para um arquivo SQL da seguinte maneira:

sqlite3 nome_do_arquivo.gpkg ".read gen_rename_sql.sql" > sqlrenames.sql

Um arquivo renames será gerado com o resultado do script.

Após isso, basta rodar o script gerado no banco

sqlite3 nome_do_arquivo.gpkg ".read sqlrenames.sql"

Isso irá renomear todas as tabelas cujo o nome terminam com 2021

logo após, basta fazer o update das tabelas internas do geopackage gpkg_geometry_columns e gpkg_gpkg_contents usando os SQLs a seguir;

UPDATE gpkg_contents
  SET table_name = replace(table_name, '2021', '2020')
  WHERE table_name like '%2021';

UPDATE gpkg_geometry_columns
  SET table_name = replace(table_name, '2021', '2020')
  WHERE table_name like '%2021';

ATENÇÃO:

  • O script gen_rename_sql.sql já possui os SQLs para fazer a alteração em gpkg_contents e gpkg_geometry_columns, não há necessidade de executar essas instruções novamente;
  • Se utilizar outro nome para o arquivo sqlrenames.sql lembre-se de informar o nome correto em todos os locais necessários;
  • O arquivo sqlrenames.sql é um arquivo temporario, pois para executar os comandos no banco, ele não pode estar travado para edições.
-- Gerando o SQL para renomear as tabelas de 2021 para 2020
SELECT
'ALTER TABLE '|| table_name || ' RENAME TO ''' || replace(table_name, '2021', '2020') ||''';'
FROM gpkg_geometry_columns
WHERE table_name like '%2021';
-- Fazendo UPDATE da tabela gpkg_contents
UPDATE gpkg_contents
SET table_name = replace(table_name, '2021', '2020')
WHERE table_name like '%2021';
-- Fazendo UPDATE da tabela gpkg_geometry_columns
UPDATE gpkg_geometry_columns
SET table_name = replace(table_name, '2021', '2020')
WHERE table_name like '%2021';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment