insertar un campo json en una tabla postgres
Tue Dec 09 2025 19:13:26 GMT+0000 (Coordinated Universal Time)
Recomendación: Usa la Opción 1 si es un solo registro, ya que es más simple y directa.
esto no lo puedo hacer de una manera mas simplificada:INSERT INTO public.entes
SELECT
(data->>'id_ente')::integer,
data->>'nombre_ente',
data->>'descripcion',
(data->>'id_sector')::integer,
(data->>'id_estatus')::integer,
data->>'rif',
data->>'direccion',
data->>'telf_ente',
(data->>'id_asociacionente')::integer
FROM json_array_elements('[
{
"id_ente": 25,
"nombre_ente": "FUVIDIT",
"descripcion": "Fundación Venezolana de Investigación, Desarrollo e Innovación para el Transporte",
"id_sector": 1,
"id_estatus": 2,
"rif": "RIF. G-20016149-3",
"direccion": "Av. Francisco de Miranda con Av. hacia autopista Francisco Fajardo frente al Museo del Transporte, antiguo Complejo Vivero Odebrecht, Código Postal 1071, Edo. Miranda",
"telf_ente": "(0212) 238.33.47",
"id_asociacionente": 5
}
]') AS data;
¡Sí, puedes simplificarlo! PostgreSQL tiene formas más directas para trabajar con JSON. Aquí te muestro algunas opciones más simplificadas:
Opción más simple (PostgreSQL 9.4+):
sql
INSERT INTO public.entes
SELECT * FROM json_populate_record(
NULL::public.entes,
'{
"id_ente": 25,
"nombre_ente": "FUVIDIT",
"descripcion": "Fundación Venezolana de Investigación, Desarrollo e Innovación para el Transporte",
"id_sector": 1,
"id_estatus": 2,
"rif": "RIF. G-20016149-3",
"direccion": "Av. Francisco de Miranda con Av. hacia autopista Francisco Fajardo frente al Museo del Transporte, antiguo Complejo Vivero Odebrecht, Código Postal 1071, Edo. Miranda",
"telf_ente": "(0212) 238.33.47",
"id_asociacionente": 5
}'
);
Otra forma aún más directa (PostgreSQL 9.5+):
sql
INSERT INTO public.entes
SELECT *
FROM jsonb_to_record('{
"id_ente": 25,
"nombre_ente": "FUVIDIT",
"descripcion": "Fundación Venezolana de Investigación, Desarrollo e Innovación para el Transporte",
"id_sector": 1,
"id_estatus": 2,
"rif": "RIF. G-20016149-3",
"direccion": "Av. Francisco de Miranda con Av. hacia autopista Francisco Fajardo frente al Museo del Transporte, antiguo Complejo Vivero Odebrecht, Código Postal 1071, Edo. Miranda",
"telf_ente": "(0212) 238.33.47",
"id_asociacionente": 5
}') AS x(
id_ente integer,
nombre_ente varchar,
descripcion varchar,
id_sector integer,
id_estatus integer,
rif varchar,
direccion varchar,
telf_ente varchar,
id_asociacionente integer
);
La más simple de todas (si tienes el JSON como variable):
Si estás usando un lenguaje de programación, la forma más simple sería:
sql
-- Si estás en psql o tienes el JSON como texto
\set contenido_json '{"id_ente":25,"nombre_ente":"FUVIDIT","descripcion":"Fundación Venezolana de Investigación, Desarrollo e Innovación para el Transporte","id_sector":1,"id_estatus":2,"rif":"RIF. G-20016149-3","direccion":"Av. Francisco de Miranda con Av. hacia autopista Francisco Fajardo frente al Museo del Transporte, antiguo Complejo Vivero Odebrecht, Código Postal 1071, Edo. Miranda","telf_ente":"(0212) 238.33.47","id_asociacionente":5}'
INSERT INTO public.entes SELECT * FROM json_populate_record(NULL::public.entes, :'contenido_json');
Mi recomendación:
Usa json_populate_record (primera opción) porque:
Es más corto y legible
No necesitas especificar los tipos de datos manualmente
Se adapta automáticamente a la estructura de la tabla
Es nativo de PostgreSQL
sql
-- Esta es la más simple y elegante:
INSERT INTO public.entes
SELECT * FROM json_populate_record(
NULL::public.entes,
'{"id_ente":25,"nombre_ente":"FUVIDIT","descripcion":"Fundación Venezolana de Investigación, Desarrollo e Innovación para el Transporte","id_sector":1,"id_estatus":2,"rif":"RIF. G-20016149-3","direccion":"Av. Francisco de Miranda con Av. hacia autopista Francisco Fajardo frente al Museo del Transporte, antiguo Complejo Vivero Odebrecht, Código Postal 1071, Edo. Miranda","telf_ente":"(0212) 238.33.47","id_asociacionente":5}'
);
Nota: Si tu JSON tiene un array (como en tu ejemplo original con []), usa json_populate_recordset en lugar de json_populate_record.



Comments