Árvore de páginas

O uso do banco de dados PostgreSQL em Linux é recomendado para cenário de produção, sempre com acompanhamento de um DBA capacitado; porém algumas dúvidas podem surgir durante o processo. Visando facilitar a obtenção de algumas informações, esta página reúne itens relevantes para o uso do PostgreSQL em Linux.

Preciso de suporte para meu ambiente, o que fazer? 

Consulte nossa documentação com orientações sobre como buscar o suporte.

Fiz a instalação e ao tentar utilizar o Protheus obtive um erro de UUID (could not open extension control file [...]), e agora? 

Erro: 

ERROR:  could not open extension control file "/<caminho de instalação do PostgreSQL>/extension/uuid-ossp.control": No such file or directory

Correção:

Realize a instalação do pacote postgresql-contrib em seu sistema operacional
dnf install postgresql-contrib
Instale a extensão UUID-OSSP no PostgreSQL. Este comando deve ser executado dentro do banco de dados:
CREATE OR REPLACE extension IF NOT EXISTS "uuid-ossp";

Se você estiver em uma nova instalação (base zerada, sem dados inseridos), é possível apenas recriar o banco de dados. Faça isto apenas se a base não estiver sendo utilizada e estiver sem dados inseridos. Após, certifique-se de reiniciar o DBAccess.

Se você estiver em uma jornada de migração ou se sua base de dados já está sendo utilizada, existem dois cenários possíveis.

Em ambos os casos, será necessário reiniciar o DBAccess após as modificações. Qualquer manutenção e alteração direta no banco de dados requer que o serviço do DBAccess seja reiniciado. 

Os comandos a seguir devem ser feitos na base de origem SQL Server. Cada bloco de comando trará, como resultado, um script pronto para ser executado em PostgreSQL. Execute o resultado de cada bloco na ordem descrita.

Certifique-se de que a extensão uuid-ossp está instalada em seu banco de dados de destino antes de executar estes comandos. Caso contrário, o erro não será corrigido.
-- Bloco 1: Alteracao do campo para tipo varchar
select 'alter table ' + object_NAME(c.object_id) + ' alter column ' + c.name + ' type varchar;'
FROM sys.all_columns c
INNER JOIN sys.types t ON t.system_type_id = c.system_type_id
where Object_Schema_name(c.object_id) <> 'sys'
        and t.name = 'uniqueidentifier';

-- Bloco 2: Remocao do default
select 'alter table ' + object_NAME(c.object_id) + ' alter column ' + c.name + ' drop default;'
FROM sys.all_columns c
INNER JOIN sys.types t ON t.system_type_id = c.system_type_id
where Object_Schema_name(c.object_id) <> 'sys'
        and t.name = 'uniqueidentifier';

-- Bloco 3: Definicao do tipo do campo
select 'alter table ' + object_NAME(c.object_id) + ' alter column ' + c.name + ' type uuid using uuid_generate_v4();'
FROM sys.all_columns c
INNER JOIN sys.types t ON t.system_type_id = c.system_type_id
where Object_Schema_name(c.object_id) <> 'sys'
        and t.name = 'uniqueidentifier';

-- Bloco 4: Definicao do padrao do campo
select 'alter table ' + object_NAME(c.object_id) + ' alter column ' + c.name + ' set default uuid_generate_v4();'
FROM sys.all_columns c
INNER JOIN sys.types t ON t.system_type_id = c.system_type_id
where Object_Schema_name(c.object_id) <> 'sys'
        and t.name = 'uniqueidentifier';

Os comandos gerados por cada bloco realizam, respectivamente:

  • Alteração do tipo das colunas para varchar
  •  Removeção do valor padrão da coluna
  •  Definição do datatype da coluna como UUID 
  •  Definição do valor padrão da coluna com a função de conversão utilizada pelo DBAccess. 

Consulte aqui a documentação do PostgreSQL sobre o gerador de UUID. Caso tenha interesse, verifique também a documentação sobre os Campos UUID no DBAccess.

Os comandos a seguir devem ser feitos na sua base de dados PostgreSQL. Cada bloco de comando trará, como resultado, um script pronto para ser executado. Execute o resultado de cada bloco na ordem descrita em sua base de dados.

Certifique-se de que a extensão uuid-ossp está instalada em seu banco de dados de destino antes de executar estes comandos. Caso contrário, o erro não será corrigido.

Os comandos utilizam o padrão de nomenclatura da base de dados como tmprd. Caso você tenha outro nome para sua base de dados, certifique-se de alterar o valor table_catalog = '<nome de sua base de dados>' em todos os blocos.

-- Bloco 1: Alteracao do campo para tipo varchar
select 'alter table ' || table_name || ' alter column ' || column_name || ' type varchar;' as "bloco_1"
from information_schema.columns 
where column_name like '%msuidt' 
and table_catalog = 'tmprd';

-- Bloco 2: Remocao do default
select 'alter table ' || table_name || ' alter column ' || column_name || ' drop default;' as "bloco_2"
from information_schema.columns 
where column_name like '%msuidt' 
and table_catalog = 'tmprd';

-- Bloco 3: Definicao do tipo do campo
select 'alter table ' || table_name || ' alter column ' || column_name || ' type uuid using uuid_generate_v4();' as "bloco_3" 
from information_schema.columns 
where column_name like '%msuidt' 
and table_catalog = 'tmprd';

-- Bloco 4: Definicao do padrao do campo
select 'alter table ' || table_name || ' alter column ' || column_name || ' set default uuid_generate_v4();' as "bloco_4"
from information_schema.columns 
where column_name like '%msuidt' 
and table_catalog = 'tmprd';

Os comandos gerados por cada bloco realizam, respectivamente:

  • Alteração do tipo das colunas para varchar
  •  Removeção do valor padrão da coluna
  •  Definição do datatype da coluna como UUID 
  •  Definição do valor padrão da coluna com a função de conversão utilizada pelo DBAccess. 

Consulte aqui a documentação do PostgreSQL sobre o gerador de UUID. Caso tenha interesse, verifique também a documentação sobre os Campos UUID no DBAccess.

  • Sem rótulos