Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

339
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda