{"id":35557,"date":"2026-03-18T14:23:48","date_gmt":"2026-03-18T13:23:48","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=35557"},"modified":"2026-03-18T14:23:50","modified_gmt":"2026-03-18T13:23:50","slug":"optimiza-tus-aplicaciones-node-j","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/","title":{"rendered":"Colas invisibles: el truco de PostgreSQL para gestionar tareas"},"content":{"rendered":"\n<p>Este segundo art\u00edculo sobre <strong>\u201ccolear sin cola\u201d<\/strong> se centra en una implementaci\u00f3n basada en PostgreSQL. Esta soluci\u00f3n traslada la gesti\u00f3n de colas desde el sistema de nodos hacia la base de datos, donde cuenta con almacenamiento dedicado para guardar el estado de las colas. El protagonista de este post ser\u00e1 <strong>pg-boss<\/strong>, una librer\u00eda de NPM que implementa el sistema de colas gracias a <strong>pg<\/strong> y PostgreSQL.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-pg-boss\"><strong>pg-boss<\/strong><\/h2>\n\n\n\n<p><strong>pg-boss<\/strong> es una cola de trabajos construida en Node.js sobre PostgreSQL, dise\u00f1ada para proporcionar procesamiento en segundo plano y ejecuci\u00f3n as\u00edncrona confiable en aplicaciones Node.js.<\/p>\n\n\n\n<p>Cuenta con una API sencilla y ofrece muchas funcionalidades \u00fatiles para manejar colas en nuestro sistema.<\/p>\n\n\n\n<p>Para trabajar con <strong>pg-boss<\/strong>, es necesario permitirle crear un esquema de base de datos personalizado para gestionar las colas. Como veremos pronto, una simple instalaci\u00f3n desde NPM y algunos conocimientos b\u00e1sicos son suficientes para usarlo sin problemas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Comenzando con pg-boss<\/strong><\/h3>\n\n\n\n<p>Para empezar con <strong>pg-boss<\/strong>, inst\u00e1lalo en tu proyecto Node.js.<br>Ya he creado un proyecto sencillo para que sigas el post; lo puedes encontrar aqu\u00ed.<br>El primer paso simple, despu\u00e9s de hacer el <code>git clone<\/code> y <code>npm install<\/code>, es ejecutar los comandos:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">npm install pg pg-boss<br>npm install -D @types\/pg<\/pre>\n\n\n\n<p>Esos comandos instalan las dependencias en tu proyecto.<br>Con esto, ya est\u00e1s listo para usar <strong>pg-boss<\/strong> en tu proyecto.<br>Como puedes ver, la configuraci\u00f3n de este paquete es sencilla y f\u00e1cil de hacer.<\/p>\n\n\n\n<p>Antes de empezar a programar, necesitamos configurar una base de datos PostgreSQL. Ya la he preparado para ti. Si tienes Docker instalado en tu equipo, escribe:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker compose up -d<\/pre>\n\n\n\n<p>y tu base de datos estar\u00e1 lista para usar.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Crear la cola<\/strong><\/h3>\n\n\n\n<p>Primero, necesitas crear una conexi\u00f3n con la base de datos para que <strong>pg-boss<\/strong> pueda conectarse a ella. <strong>pg-boss<\/strong> simplifica este paso y permite pasar las opciones de conexi\u00f3n.<br>Crea un archivo en esta ruta:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">src\/pgBoss.ts<\/code><\/span><\/pre>\n\n\n<p>y a\u00f1ade este contenido:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> PgBoss <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'pg-boss'<\/span>;\n  \n<span class=\"hljs-keyword\">const<\/span> pgBossInstance = <span class=\"hljs-keyword\">new<\/span> PgBoss({\n  <span class=\"hljs-attr\">host<\/span>: process.env.POSTGRES_HOST!,\n  <span class=\"hljs-attr\">port<\/span>: <span class=\"hljs-built_in\">Number<\/span>(process.env.POSTGRES_PORT!),\n  <span class=\"hljs-attr\">user<\/span>: process.env.POSTGRES_USER!,\n  <span class=\"hljs-attr\">password<\/span>: process.env.POSTGRES_PASSWORD!,\n  <span class=\"hljs-attr\">database<\/span>: process.env.POSTGRES_DB!,\n});pgBossInstance.on(<span class=\"hljs-string\">'error'<\/span>, <span class=\"hljs-built_in\">console<\/span>.error)<span class=\"hljs-keyword\">await<\/span> pgBossInstance.start()<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> pgBossInstance;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Este c\u00f3digo crea una instancia de <strong>pg-boss<\/strong> y la conecta a la base de datos. Como puedes ver, crear una instancia de <strong>pg-boss<\/strong> es f\u00e1cil.<\/p>\n\n\n\n<p>Ahora es momento de crear la cola.<br>Comencemos a\u00f1adiendo el nombre de la cola en el archivo <code>src\/common.ts<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">export const QUEUE_NAME = 'user-creation-queue';<\/pre>\n\n\n\n<p>Es momento de crear tu cola. Crea un nuevo archivo en esta ruta: <code>src\/queue.ts<\/code>, y a\u00f1ade este c\u00f3digo:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> pgBossInstance <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"pgBoss.js\"<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { QUEUE_NAME, UserCreatedTask } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/common.js\"<\/span>;<span class=\"hljs-keyword\">await<\/span> pgBossInstance.createQueue(QUEUE_NAME, {\n  <span class=\"hljs-attr\">name<\/span>: QUEUE_NAME,\n  <span class=\"hljs-attr\">retryLimit<\/span>: <span class=\"hljs-number\">2<\/span>\n});<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> <span class=\"hljs-title\">enqueueJob<\/span>(<span class=\"hljs-params\">job: UserCreatedTask<\/span>) <\/span>{\n  <span class=\"hljs-keyword\">return<\/span> pgBossInstance.send(QUEUE_NAME, job);\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Como puedes notar, este c\u00f3digo tambi\u00e9n es f\u00e1cil de entender.<br>Primero, importas el nombre de la cola. Luego, usando el m\u00e9todo <code>createQueue<\/code>, creas una cola <strong>pg-boss<\/strong> con el nombre y un <code>retryLimit<\/code> igual a dos; esto significa que si el mismo mensaje falla dos veces, la cola lo descarta. Si quieres, tambi\u00e9n puedes definir una <strong>dead letter queue<\/strong> y encontrar m\u00e1s informaci\u00f3n aqu\u00ed.<br>Por \u00faltimo, se exporta la funci\u00f3n <code>enqueueJob<\/code> para enviar tareas a la cola.<\/p>\n\n\n\n<p>El \u00faltimo paso es enviar datos a la cola, as\u00ed que ve al archivo <code>src\/index.ts<\/code> y a\u00f1ade estas dos importaciones despu\u00e9s de <code>randomUUID<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> logger <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'logger.js'<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { enqueueJob } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'queue.js'<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>y luego reemplaza el <code>TODO<\/code> con el siguiente c\u00f3digo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">const idTask = await enqueueJob(task);<br>logger.info(task, `Task with id ${idTask} has been pushed`);<\/pre>\n\n\n\n<p>Este c\u00f3digo permite enviar eventos dentro de la cola.<br>Prob\u00e9moslo.<br>Abre la terminal y escribe <code>npm run start<\/code>; el resultado deber\u00eda ser algo como esto:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">&#91;<span class=\"hljs-number\">19<\/span>:<span class=\"hljs-number\">07<\/span>:<span class=\"hljs-number\">34.036<\/span>] INFO (<span class=\"hljs-number\">23215<\/span>): Task <span class=\"hljs-keyword\">with<\/span> id a5a01088<span class=\"hljs-number\">-25<\/span>b9<span class=\"hljs-number\">-424<\/span>c<span class=\"hljs-number\">-8<\/span>a1e<span class=\"hljs-number\">-4<\/span>ec1e678ae96 has been pushed\n    <span class=\"hljs-attr\">id<\/span>: <span class=\"hljs-string\">\"8cd828c2-4028-45bb-bea4-6cdaf3627496\"<\/span>\n&#91;<span class=\"hljs-number\">19<\/span>:<span class=\"hljs-number\">07<\/span>:<span class=\"hljs-number\">34.037<\/span>] INFO (<span class=\"hljs-number\">23215<\/span>): Task <span class=\"hljs-keyword\">with<\/span> id <span class=\"hljs-number\">92071<\/span>cf5-d278<span class=\"hljs-number\">-4654<\/span><span class=\"hljs-number\">-8<\/span>fda<span class=\"hljs-number\">-4076763e62<\/span>d1 has been pushed\n    <span class=\"hljs-attr\">id<\/span>: <span class=\"hljs-string\">\"13e6b091-b85e-48ba-9d2c-a376fc5ada8d\"<\/span>\n&#91;<span class=\"hljs-number\">19<\/span>:<span class=\"hljs-number\">07<\/span>:<span class=\"hljs-number\">34.038<\/span>] INFO (<span class=\"hljs-number\">23215<\/span>): Task <span class=\"hljs-keyword\">with<\/span> id <span class=\"hljs-number\">1567<\/span>a32b-daa2<span class=\"hljs-number\">-43<\/span>f7-a016<span class=\"hljs-number\">-2729<\/span>f5511f86 has been pushed\n    <span class=\"hljs-attr\">id<\/span>: <span class=\"hljs-string\">\"0589cb0e-9423-48dc-ab05-85ac560aa886\"<\/span>\n&#91;<span class=\"hljs-number\">19<\/span>:<span class=\"hljs-number\">07<\/span>:<span class=\"hljs-number\">34.039<\/span>] INFO (<span class=\"hljs-number\">23215<\/span>): Task <span class=\"hljs-keyword\">with<\/span> id <span class=\"hljs-number\">5<\/span>aecbd45-a6d5<span class=\"hljs-number\">-4913<\/span><span class=\"hljs-number\">-816<\/span>f<span class=\"hljs-number\">-8<\/span>bb495792569 has been pushed\n    <span class=\"hljs-attr\">id<\/span>: <span class=\"hljs-string\">\"8b0218d1-22eb-4869-9bf8-7d9bc42b84a0\"<\/span>\n&#91;<span class=\"hljs-number\">19<\/span>:<span class=\"hljs-number\">07<\/span>:<span class=\"hljs-number\">34.040<\/span>] INFO (<span class=\"hljs-number\">23215<\/span>): Task <span class=\"hljs-keyword\">with<\/span> id adc92a04-ff85<span class=\"hljs-number\">-49<\/span>a6<span class=\"hljs-number\">-9539<\/span>-ea993b77a31c has been pushed\n    <span class=\"hljs-attr\">id<\/span>: <span class=\"hljs-string\">\"1269f0d5-bbcd-49fd-89d5-7102be8237be\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\u00a1Genial! Acabas de completar la primera parte, y ahora sabes c\u00f3mo enviar datos a una cola <strong>pg-boss<\/strong>.<br>Pasemos al procesamiento.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Procesando mensajes con pg-boss<\/strong><\/h3>\n\n\n\n<p>Para procesar los mensajes, ya he preparado un archivo <code>src\/worker.js<\/code>, donde escribir\u00e1s el c\u00f3digo.<br>Abre el archivo <code>src\/worker.js<\/code> y a\u00f1ade las siguientes importaciones:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> { setTimeout } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\"timers\/promises\"<\/span>;\n<span class=\"hljs-keyword\">import<\/span> { QUEUE_NAME, UserCreatedTask } <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/common.js\"<\/span>;\n<span class=\"hljs-keyword\">import<\/span> pgBossInstance <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">\".\/pgBoss.js\"<\/span>;<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>y reemplaza el <code>TODO<\/code> con el siguiente c\u00f3digo:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">pgBossInstance.work&lt;UserCreatedTask&gt;<span class=\"hljs-function\">(<span class=\"hljs-params\">QUEUE_NAME, <span class=\"hljs-keyword\">async<\/span> (&#91;job]<\/span>) =&gt;<\/span> {\n  <span class=\"hljs-keyword\">if<\/span> (!messagesHandled&#91;job.id]) {\n    messagesHandled&#91;job.id] = { <span class=\"hljs-attr\">retries<\/span>: <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-attr\">result<\/span>: <span class=\"hljs-string\">'created'<\/span> }; \n } <span class=\"hljs-keyword\">else<\/span> {\n    messagesHandled&#91;job.id].retries++;\n }\n  <span class=\"hljs-keyword\">const<\/span> resultType = <span class=\"hljs-built_in\">Math<\/span>.random() &gt; <span class=\"hljs-number\">0.6<\/span>;\n  <span class=\"hljs-keyword\">const<\/span> fakeImplementation = resultType ? <span class=\"hljs-string\">'success'<\/span> : <span class=\"hljs-string\">'error'<\/span>\n  <span class=\"hljs-keyword\">const<\/span> timeout = fakeImplementation === <span class=\"hljs-string\">'success'<\/span> ? <span class=\"hljs-number\">2000<\/span> : <span class=\"hljs-number\">1000<\/span>;\n  <span class=\"hljs-keyword\">await<\/span> setTimeout(timeout);\n  <span class=\"hljs-keyword\">if<\/span> (fakeImplementation === <span class=\"hljs-string\">'error'<\/span>) {\n    messagesHandled&#91;job.id].result = <span class=\"hljs-string\">'error'<\/span>;\n    printMessagesHandled();\n    <span class=\"hljs-keyword\">const<\/span> message = <span class=\"hljs-string\">`User created task got error with id: <span class=\"hljs-subst\">${job.id}<\/span>`<\/span>\n    <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-built_in\">Error<\/span>(message);\n } <span class=\"hljs-keyword\">else<\/span> {\n    messagesHandled&#91;job.id].result = <span class=\"hljs-string\">'success'<\/span>;\n    printMessagesHandled();\n }\n});<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>En este c\u00f3digo est\u00e1s simulando el procesamiento de mensajes. Primero, gestionas un mapa con todos los mensajes procesados para imprimir el resultado en la consola. Luego, usando <code>Math.random()<\/code>, determinas si el mensaje falla o tiene \u00e9xito y esperas dos o un segundo seg\u00fan el resultado. Por \u00faltimo, si el mensaje falla, lanzas un error; de lo contrario, imprimes el resultado en la consola (solo para mostrar el resultado de este ejemplo).<\/p>\n\n\n\n<p>Como puedes entender, si la funci\u00f3n lanza un error, <strong>pg-boss<\/strong> marcar\u00e1 el mensaje como fallido; de lo contrario, se interpretar\u00e1 como completado.<\/p>\n\n\n\n<p>Ejecutemos el c\u00f3digo con <code>npm run start<\/code>.<br>El resultado final deber\u00eda verse as\u00ed:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Unique messages handled: 5\n940c9d32-3b83-4034-ba81-3b2d88035305: success (2 retries)\na19a224f-20c1-4481-b54b-81d73b81c691: success (1 retries)\n701f1a33-bde2-4013-9bd3-d4a4e0bedcf7: success (2 retries)\nd00b4a03-2e11-4f05-b2c3-8e60f2efe4f6: success (1 retries)\n6d660781-0fdf-4414-8bc6-d791be0588dc: success (0 retries)<\/code><\/span><\/pre>\n\n\n<p>Como puedes ver, el sistema ha procesado cinco mensajes en este caso. Algunos tuvieron reintentos, otros no.<br>\u00a1Perfecto! Ahora tambi\u00e9n aprendiste c\u00f3mo procesar mensajes con <strong>pg-boss<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Conclusi\u00f3n<\/strong><\/h3>\n\n\n\n<p>\u00a1Es hora de cerrar este post!<\/p>\n\n\n\n<p>Como puedes ver, trabajar con <strong>pg-boss<\/strong> es sencillo; la API es simple y el c\u00f3digo se mantiene simple.<br>Este enfoque puede ser una excelente soluci\u00f3n si no tienes un sistema de colas espec\u00edfico en tu arquitectura, pero debes prestar atenci\u00f3n a la carga que puede soportar la base de datos para manejar tus colas; por eso, en el siguiente art\u00edculo veremos otra soluci\u00f3n: la soluci\u00f3n que mi equipo eligi\u00f3 para equilibrar rendimiento y simplicidad.<\/p>\n\n\n\n<p>Bueno, eso es todo por <strong>pg-boss<\/strong>. Espero que hayas disfrutado del art\u00edculo y nos vemos en el pr\u00f3ximo.<\/p>\n\n\n\n<p>\u00a1Adi\u00f3s! \ud83d\udc4b<\/p>\n\n\n\n<p>p.d. Puedes encontrar el c\u00f3digo completo del art\u00edculo <a href=\"https:\/\/github.com\/Puppo\/queueing-without-a-queue\/tree\/postgres-result\">aqu\u00ed<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este segundo art\u00edculo sobre \u201ccolear sin cola\u201d se centra en una implementaci\u00f3n basada en PostgreSQL. Esta soluci\u00f3n traslada la gesti\u00f3n de colas desde el sistema de nodos hacia la base de datos, donde cuenta con almacenamiento dedicado para guardar el estado de las colas. El protagonista de este post ser\u00e1 pg-boss, una librer\u00eda de NPM&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/\">Read more<\/a><\/p>\n","protected":false},"author":177,"featured_media":32435,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10606],"tags":[12971,12180],"collections":[13012],"class_list":{"0":"post-35557","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend-es","8":"tag-node-js-es","9":"tag-postgresql-es","10":"collections-top-of-the-week-es","11":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Colas invisibles: el truco de PostgreSQL para gestionar tareas<\/title>\n<meta name=\"description\" content=\"Este segundo art\u00edculo sobre colear sin cola se centra en una implementaci\u00f3n con PostgreSQL. Esta soluci\u00f3n traslada la implementaci\u00f3n de la cola desde el sistema de nodos a la base de datos, donde cuenta con un almacenamiento dedicado para guardar el estado de las colas.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Colas invisibles: el truco de PostgreSQL para gestionar tareas\" \/>\n<meta property=\"og:description\" content=\"Este segundo art\u00edculo sobre colear sin cola se centra en una implementaci\u00f3n con PostgreSQL. Esta soluci\u00f3n traslada la implementaci\u00f3n de la cola desde el sistema de nodos a la base de datos, donde cuenta con un almacenamiento dedicado para guardar el estado de las colas.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-18T13:23:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-18T13:23:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Natalia de Pablo Garcia\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Natalia de Pablo Garcia\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/\"},\"author\":{\"name\":\"Natalia de Pablo Garcia\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/2450f8e4083152e4feaea1ada456aeee\"},\"headline\":\"Colas invisibles: el truco de PostgreSQL para gestionar tareas\",\"datePublished\":\"2026-03-18T13:23:48+00:00\",\"dateModified\":\"2026-03-18T13:23:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/\"},\"wordCount\":842,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp\",\"keywords\":[\"Node.js\",\"PostgreSQL\"],\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/\",\"name\":\"Colas invisibles: el truco de PostgreSQL para gestionar tareas\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp\",\"datePublished\":\"2026-03-18T13:23:48+00:00\",\"dateModified\":\"2026-03-18T13:23:50+00:00\",\"description\":\"Este segundo art\u00edculo sobre colear sin cola se centra en una implementaci\u00f3n con PostgreSQL. Esta soluci\u00f3n traslada la implementaci\u00f3n de la cola desde el sistema de nodos a la base de datos, donde cuenta con un almacenamiento dedicado para guardar el estado de las colas.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2025\\\/02\\\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp\",\"width\":1792,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/optimiza-tus-aplicaciones-node-j\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/es\\\/backend-es\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Colas invisibles: el truco de PostgreSQL para gestionar tareas\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/2450f8e4083152e4feaea1ada456aeee\",\"name\":\"Natalia de Pablo Garcia\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/Untitled-design-100x100.jpg\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/Untitled-design-100x100.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2023\\\/11\\\/Untitled-design-100x100.jpg\",\"caption\":\"Natalia de Pablo Garcia\"},\"sameAs\":[\"www.linkedin.com\\\/in\\\/nataliadepablo\"],\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/natalia-de-pablo-garcia\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Colas invisibles: el truco de PostgreSQL para gestionar tareas","description":"Este segundo art\u00edculo sobre colear sin cola se centra en una implementaci\u00f3n con PostgreSQL. Esta soluci\u00f3n traslada la implementaci\u00f3n de la cola desde el sistema de nodos a la base de datos, donde cuenta con un almacenamiento dedicado para guardar el estado de las colas.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/","og_locale":"en_US","og_type":"article","og_title":"Colas invisibles: el truco de PostgreSQL para gestionar tareas","og_description":"Este segundo art\u00edculo sobre colear sin cola se centra en una implementaci\u00f3n con PostgreSQL. Esta soluci\u00f3n traslada la implementaci\u00f3n de la cola desde el sistema de nodos a la base de datos, donde cuenta con un almacenamiento dedicado para guardar el estado de las colas.","og_url":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2026-03-18T13:23:48+00:00","article_modified_time":"2026-03-18T13:23:50+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp","type":"image\/webp"}],"author":"Natalia de Pablo Garcia","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Natalia de Pablo Garcia","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/"},"author":{"name":"Natalia de Pablo Garcia","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/2450f8e4083152e4feaea1ada456aeee"},"headline":"Colas invisibles: el truco de PostgreSQL para gestionar tareas","datePublished":"2026-03-18T13:23:48+00:00","dateModified":"2026-03-18T13:23:50+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/"},"wordCount":842,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp","keywords":["Node.js","PostgreSQL"],"articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/","url":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/","name":"Colas invisibles: el truco de PostgreSQL para gestionar tareas","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp","datePublished":"2026-03-18T13:23:48+00:00","dateModified":"2026-03-18T13:23:50+00:00","description":"Este segundo art\u00edculo sobre colear sin cola se centra en una implementaci\u00f3n con PostgreSQL. Esta soluci\u00f3n traslada la implementaci\u00f3n de la cola desde el sistema de nodos a la base de datos, donde cuenta con un almacenamiento dedicado para guardar el estado de las colas.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp","width":1792,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/optimiza-tus-aplicaciones-node-j\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/es\/backend-es\/"},{"@type":"ListItem","position":3,"name":"Colas invisibles: el truco de PostgreSQL para gestionar tareas"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/2450f8e4083152e4feaea1ada456aeee","name":"Natalia de Pablo Garcia","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/11\/Untitled-design-100x100.jpg","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/11\/Untitled-design-100x100.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2023\/11\/Untitled-design-100x100.jpg","caption":"Natalia de Pablo Garcia"},"sameAs":["www.linkedin.com\/in\/nataliadepablo"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/natalia-de-pablo-garcia\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-600x600.webp","author_info":{"display_name":"Natalia de Pablo Garcia","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/natalia-de-pablo-garcia\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp",1792,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-300x171.webp",300,171,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-768x439.webp",768,439,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-1024x585.webp",1024,585,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-1536x878.webp",1536,878,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg.webp",1792,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-100x100.webp",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2025\/02\/DALL\u00b7E-2025-03-13-11.36.20-A-software-developer-specializing-in-queue-management-systems-working-at-a-modern-desk-with-multiple-monitors-displaying-complex-queue-processing-alg-600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"Natalia de Pablo Garcia","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/natalia-de-pablo-garcia\/"},"uagb_comment_info":0,"uagb_excerpt":"Este segundo art\u00edculo sobre \u201ccolear sin cola\u201d se centra en una implementaci\u00f3n basada en PostgreSQL. Esta soluci\u00f3n traslada la gesti\u00f3n de colas desde el sistema de nodos hacia la base de datos, donde cuenta con almacenamiento dedicado para guardar el estado de las colas. El protagonista de este post ser\u00e1 pg-boss, una librer\u00eda de NPM&#8230;&hellip;","lang":"es","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/35557","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/177"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=35557"}],"version-history":[{"count":1,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/35557\/revisions"}],"predecessor-version":[{"id":35558,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/35557\/revisions\/35558"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/32435"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=35557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=35557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=35557"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=35557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}