Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

350
Visualizações
¿Cómo mantiene postgres 11+ el valor predeterminado después de que se elimina el valor predeterminado?

Dados los siguientes comandos:

 create table foo(id serial primary key); insert into foo values (1), (2), (3), (4); alter table foo add column bar integer not null default 10; alter table foo alter column bar drop default;

Cuando ejecuto select * from foo; Yo obtengo:

 id | bar ----+------ 1 | 10 2 | 10 3 | 10 4 | 10

¿Cómo es esto posible si a partir de postgresql 11+, evalúa los valores predeterminados no nulos de forma perezosa?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Los valores predeterminados de columna se almacenan en el catálogo del sistema pg_attrdef , mientras que las definiciones de columna se almacenan en pg_attribute . Si descarta el valor predeterminado, se elimina la fila pg_attrdef , pero no la fila pg_attribute .

El secreto detrás de lo que observa es que el "valor de atributo faltante" se almacena en pg_attribute , por lo que no se ve afectado:

 SELECT attmissingval FROM pg_attribute WHERE attrelid = 'foo'::regclass AND attname = 'bar'; attmissingval ═══════════════ {10} (1 row)
over 4 years ago · Santiago Trujillo Relatório

0

Desglosando cada declaración alter:

 alter table foo add column bar integer not null default 10

Esto agrega la nueva columna, y debido a que not null default 10 , cada fila recibe 10 para el valor de la columna.

En este punto, todas las filas existentes tienen 10 y todas las filas futuras recibirán 10 si no se proporciona un valor en la inserción.

 alter table foo alter column bar drop default

Esto no afecta las filas existentes. Solo afecta las filas futuras que se insertan, ahora requiere un valor porque la restricción not null permanece, pero el valor predeterminado no.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda