{"id":138,"date":"2015-11-01T15:36:08","date_gmt":"2015-11-01T15:36:08","guid":{"rendered":"https:\/\/www.joseluisestevez.com\/?p=138"},"modified":"2017-02-01T11:28:06","modified_gmt":"2017-02-01T11:28:06","slug":"modelo-de-datos-y-procedimientos-almacenados-en-postgresql","status":"publish","type":"post","link":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/","title":{"rendered":"Crear procedimientos almacenados en Postgresql"},"content":{"rendered":"<p>A continuaci\u00f3n quiero guiarles paso a paso para desarrollar una aplicaci\u00f3n\u00a0empresarial del mundo real usando tecnolog\u00eda libre o de f\u00e1cil acceso la cual puede ser usada como base para el desarrollo de una aplicaci\u00f3n.<\/p>\n<p>En esta entrada vamos a crear la capa de modelo de datos la cual la vamos a hacer con postgressql para crear nuestra base de datos y los procedimientos almacenados.<\/p>\n<p>Estas son las herramientas o entorno de trabajo sobre la cual he desarrollado este manual:<\/p>\n<ol>\n<li>Postgresql 9.0<\/li>\n<li>PgAdmin 1.4<\/li>\n<li>Sistema Operativo Debian 7 (Puedes usar el SO de tu preferencia)<\/li>\n<\/ol>\n<p>Para comenzar necesitamos tener nuestro modelo de negocio, vamos a crear una nueva base de datos en el PgAdmin la cual voy a nombrar simple_bd,\u00a0luego vamos a crea las tablas users y authorities las cuales ser\u00e1n base para nuestra aplicaci\u00f3n..<\/p>\n<h3><\/h3>\n<p><!--more--><\/p>\n<h3>Tabla Users<\/h3>\n<pre class=\"lang:pgsql decode:true\">CREATE TABLE users\r\n(\r\n  id bigserial NOT NULL,\r\n  first_name character varying,\r\n  last_name character varying,\r\n  email character varying NOT NULL,\r\n  phone character varying(20),\r\n  mobile character varying(20),\r\n  identification_number integer,\r\n  identification_type character varying(1),\r\n  gender character varying(1),\r\n  birthday date,\r\n  nickname character varying,\r\n  password character varying,\r\n  country_code character varying(3),\r\n  twitter character varying,\r\n  created_at timestamp without time zone,\r\n  accept_terms boolean,\r\n  is_verify boolean,\r\n  is_active boolean NOT NULL DEFAULT true,\r\n  enabled boolean NOT NULL DEFAULT true,\r\n  last_login timestamp without time zone,\r\n  attempts integer NOT NULL DEFAULT 0,\r\n  avatar character varying,\r\n  facebook_id character varying,\r\n  currency_id bigint NOT NULL DEFAULT 1,\r\n  CONSTRAINT users_pkey PRIMARY KEY (id),\r\n  CONSTRAINT users_email_key UNIQUE (email)\r\n)\r\nWITH (\r\n  OIDS=FALSE\r\n);\r\n<\/pre>\n<p>No voy a explicar cada columna, solo voy a mencionar que la tabla\u00a0 nos va a servir para guardar los nuevos usuarios, iniciar sesi\u00f3n, modificar su perfil entre otras operaciones que se pueden hacer con el usuario.<\/p>\n<h3>Tabla autorithies<\/h3>\n<pre class=\"lang:default decode:true\">CREATE TABLE authorities\r\n(\r\n  username character varying(50) NOT NULL,\r\n  authority character varying(50) NOT NULL,\r\n  id bigserial NOT NULL,\r\n  user_id bigint,\r\n  CONSTRAINT authorities_pkey PRIMARY KEY (id )\r\n)\r\nWITH (\r\n  OIDS=FALSE\r\n);<\/pre>\n<p>La tabla authorities la vamos a usar para guardar el permiso del usuario, esta nos va a ser \u00fatil m\u00e1s adelante en la pr\u00f3xima entrada cuando integremos la capa de negocio con spring jdbc.<\/p>\n<h3>Crear procedimientos almacenados<\/h3>\n<p>Ahora vamos a crear los procedimientos almacenados, en los cuales crearemos el CRUD para Crear, Leer, Actualizar y Eliminar datos de nuestras tablas.<\/p>\n<p><strong>proc_create_users<\/strong><\/p>\n<pre class=\"lang:default decode:true \">CREATE OR REPLACE FUNCTION proc_create_users(\r\n\tIN p_first_name character varying, \r\n\tIN p_last_name character varying, \r\n\tIN p_email character varying, \r\n\tIN p_phone character varying, \r\n\tIN p_mobile character varying, \r\n\tIN p_identification_number integer, \r\n\tIN p_identification_type character varying, \r\n\tIN p_gender character varying, \r\n\tIN p_birthday date, \r\n\tIN p_nickname character varying, \r\n\tIN p_password character varying, \r\n\tIN p_country_code character varying, \r\n\tIN p_twitter character varying, \r\n\tIN p_accept_terms boolean, \r\n\tIN p_is_verify boolean, \r\n\tIN p_is_active boolean, \r\n\tIN p_enabled boolean, \r\n\tIN p_last_login timestamp without time zone, \r\n\tIN p_attempts integer, \r\n\tIN p_avatar character varying, \r\n\tIN p_facebook_id character varying, \r\n\tIN p_currency_id bigint, \r\n\tIN p_username character varying, \r\n\tIN p_ipaddress character varying, \r\n\tIN p_useragent character varying, \r\n\tOUT v_message character varying, \r\n\tOUT v_end_code character varying, \r\n\tOUT v_users_id bigint)\r\n  RETURNS record AS\r\n$BODY$\r\n    DECLARE\r\n      v_cant int DEFAULT 0;\r\n      v_userid int;\r\n    BEGIN\r\n     v_end_code = '99999';\r\n          \r\n     -- VALIDO QUE NO EXISTA EL EMAIL QUE ES UN CAMPO UNICO Y ENVIO UN MENSAJE DE ERROR PERSONALIZADO\r\n     SELECT COUNT(1) INTO v_cant FROM users WHERE  email = p_email;\r\n     IF V_CANT &gt; 0 THEN\r\n        RAISE NOTICE 'Valor unico en Users ya existe ( % )', p_email ;\r\n\tv_message := 'La direcci\u00f3n de correo electr\u00f3nico \"'|| p_email ||'\" ya esta siendo utilizada' ;\r\n        v_end_code := '10001';\r\n        RETURN;\r\n     END IF;\r\n\r\n     -- FIXME: AQUI PUEDO HACER OTRAS VALIDACIONES NECESARIAS ANTES DE GUARDAR EL USUARIO\r\n\r\n     -- GUARDO LOS DATOS DEL USUARIO     \r\n     INSERT INTO users (first_name , last_name , email , phone , mobile , identification_number , identification_type , gender , \r\n            birthday , nickname , password , country_code , twitter , accept_terms , is_verify , \r\n            is_active , enabled , last_login , attempts, avatar , facebook_id  , created_at, currency_id) \r\n          VALUES (p_first_name, p_last_name, lower(p_email), p_phone, p_mobile, p_identification_number, p_identification_type, p_gender,\r\n            p_birthday, p_nickname, p_password, p_country_code, p_twitter, p_accept_terms, p_is_verify, \r\n            p_is_active, p_enabled, p_last_login, p_attempts, p_avatar, p_facebook_id, CURRENT_TIMESTAMP, p_currency_id);\r\n\r\n     v_message := 'Usuario dado de alta con exito, debe verificar su direcci\u00f3n de correo electr\u00f3nico';\r\n\r\n     -- BUSCO EL NUEVO ID DE USUARIO PARA ENVIARLO COMO PARTE DE LA RESPUESTA\r\n     SELECT currval('users_id_seq') INTO v_users_id;\r\n\r\n     RAISE NOTICE 'SE GUARDO CON EXITO ID %', v_users_id;\r\n\r\n     -- CREAMOS EN LA TABLA AUTHORITIES EL NUEVO USUARIO PARA QUE TENGA EL PERMISO DE USUARIO\r\n     INSERT INTO authorities(username, authority, user_id) VALUES (lower(p_email), 'ROLE_USER', v_users_id);\r\n     \r\n     v_end_code := '00000';\r\n     RETURN;\r\n     \r\n    END;\r\n$BODY$\r\n  LANGUAGE plpgsql VOLATILE\r\n  COST 100;<\/pre>\n<p>Ahora probamos que nuestro procedimiento almacenado funcione bien usando PgAdmin:<\/p>\n<pre class=\"lang:default decode:true \">select * FROM proc_create_users('JOSE',\t'ESTEVEZ',  'jestevez@mail.com', '+584125552211', \r\n\t'+584125552211', 12345678, 'E', 'M', '2015-01-01', 'Yeyo', '*****', 'VE', \r\n\t'@predimania', true, false, true, true, NULL, 0, '', '', 1,'', '', '');<\/pre>\n<p>Un ejemplo de la salida:<\/p>\n<p><a href=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/Captura-de-pantalla-de-2015-11-02-095919.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-152 size-large\" src=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/Captura-de-pantalla-de-2015-11-02-095919-1024x576.png\" alt=\"Captura de pantalla de 2015-11-02 09:59:19\" width=\"1024\" height=\"576\" srcset=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/Captura-de-pantalla-de-2015-11-02-095919-1024x576.png 1024w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/Captura-de-pantalla-de-2015-11-02-095919-300x169.png 300w, https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/Captura-de-pantalla-de-2015-11-02-095919.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Este ha sido un ejemplo sencillo de crear un procedimiento almacenado, ahora veamos uno mas complejo con parametros de Salida.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>proc_find_users_id<\/strong><\/p>\n<pre class=\"lang:pgsql decode:true\">CREATE OR REPLACE FUNCTION proc_find_users_id(IN p_id bigint, IN p_username character varying, IN p_ipaddress character varying, IN p_useragent character varying, OUT v_message character varying, OUT v_end_code character varying, OUT ref refcursor)\r\n  RETURNS record AS\r\n$BODY$\r\n    DECLARE\r\n    BEGIN\r\n      v_end_code = '99999';\r\n      OPEN ref FOR \r\n\tSELECT id, first_name, last_name, email, phone, mobile, identification_number, \r\n\t\tidentification_type, gender, birthday, nickname, password, btc_address, \r\n\t\tcountry_code, twitter, created_at, accept_terms, is_verify, is_active, \r\n\t\tenabled, last_login, attempts, leagues_ids, avatar, facebook_id, \r\n                currency_id\r\n\t\tFROM users where id = p_id;\r\n\r\n      v_end_code = '00000';\r\n      RETURN;\r\n\r\n    END;\r\n$BODY$\r\n  LANGUAGE plpgsql VOLATILE\r\n  COST 100;\r\n \r\n<\/pre>\n<p>Ahora vamos a probar nuestro procedimiento almacenado, para ello vamos al pgadmin y ejecutamos los siguiente pero vamo a hacerlo paso a paso:<\/p>\n<pre class=\"lang:pgsql decode:true \">-- Iniciamos una transacci\u00f3n\r\nBEGIN;\r\n-- Ejecutamos nuestro procedimiento almacenado\r\nselect * from proc_find_users_id(1, '', '', '');\r\n-- El resultado nos retorna el nombre del cursor actual en mi caso unnamed portal 1 que vamos a usar para ver el resultado\r\nFETCH ALL IN \"&lt;unnamed portal 1&gt;\";\r\n-- Al finalizar hacemos commit\r\nCOMMIT;<\/pre>\n<p>&nbsp;<\/p>\n<p>Enhorabuena! ya sabemos hacer procedimientos almacenados y ejecutarlos desde PgAdmin.<\/p>\n<p>Est\u00e9n atentos a mis pr\u00f3ximas entradas donde voy a dar mas ejemplos!<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A continuaci\u00f3n quiero guiarles paso a paso para desarrollar una aplicaci\u00f3n\u00a0empresarial del mundo real usando tecnolog\u00eda libre o de f\u00e1cil acceso la cual puede ser usada como base para el desarrollo de una aplicaci\u00f3n. En esta entrada vamos a crear la capa de modelo de datos la cual la vamos a hacer con postgressql para [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":162,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,16,15,11],"tags":[19,17,18],"class_list":["post-138","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pgsql","category-postgresql","category-sql","category-stored-procedures","tag-pgsql","tag-postgresql","tag-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Crear procedimientos almacenados en Postgresql - El Blog de Jose Luis Estevez<\/title>\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.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crear procedimientos almacenados en Postgresql - El Blog de Jose Luis Estevez\" \/>\n<meta property=\"og:description\" content=\"A continuaci\u00f3n quiero guiarles paso a paso para desarrollar una aplicaci\u00f3n\u00a0empresarial del mundo real usando tecnolog\u00eda libre o de f\u00e1cil acceso la cual puede ser usada como base para el desarrollo de una aplicaci\u00f3n. En esta entrada vamos a crear la capa de modelo de datos la cual la vamos a hacer con postgressql para [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"El Blog de Jose Luis Estevez\" \/>\n<meta property=\"article:published_time\" content=\"2015-11-01T15:36:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-02-01T11:28:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/pgadmin.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1159\" \/>\n\t<meta property=\"og:image:height\" content=\"704\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"yeyo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"yeyo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/\"},\"author\":{\"name\":\"yeyo\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/#\\\/schema\\\/person\\\/6a17b38fcac664fdb33a5fba8056d0ee\"},\"headline\":\"Crear procedimientos almacenados en Postgresql\",\"datePublished\":\"2015-11-01T15:36:08+00:00\",\"dateModified\":\"2017-02-01T11:28:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/\"},\"wordCount\":345,\"image\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.joseluisestevez.com\\\/wp-content\\\/uploads\\\/2015\\\/11\\\/pgadmin.png\",\"keywords\":[\"PgSQL\",\"Postgresql\",\"SQL\"],\"articleSection\":[\"PgSql\",\"Postgresql\",\"SQL\",\"Stored Procedures\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/\",\"url\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/\",\"name\":\"Crear procedimientos almacenados en Postgresql - El Blog de Jose Luis Estevez\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.joseluisestevez.com\\\/wp-content\\\/uploads\\\/2015\\\/11\\\/pgadmin.png\",\"datePublished\":\"2015-11-01T15:36:08+00:00\",\"dateModified\":\"2017-02-01T11:28:06+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/#\\\/schema\\\/person\\\/6a17b38fcac664fdb33a5fba8056d0ee\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.joseluisestevez.com\\\/wp-content\\\/uploads\\\/2015\\\/11\\\/pgadmin.png\",\"contentUrl\":\"https:\\\/\\\/www.joseluisestevez.com\\\/wp-content\\\/uploads\\\/2015\\\/11\\\/pgadmin.png\",\"width\":1159,\"height\":704},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/2015\\\/11\\\/01\\\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/www.joseluisestevez.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Crear procedimientos almacenados en Postgresql\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/#website\",\"url\":\"https:\\\/\\\/www.joseluisestevez.com\\\/\",\"name\":\"El Blog de Jose Luis Estevez\",\"description\":\"Desarrollador Senior\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.joseluisestevez.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.joseluisestevez.com\\\/#\\\/schema\\\/person\\\/6a17b38fcac664fdb33a5fba8056d0ee\",\"name\":\"yeyo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g\",\"caption\":\"yeyo\"},\"description\":\"Arquitecto de Software emprendedor con ardua experiencia en el camino de la tecnolog\u00eda.\",\"sameAs\":[\"http:\\\/\\\/www.joseluisestevez.com\"],\"url\":\"https:\\\/\\\/www.joseluisestevez.com\\\/index.php\\\/author\\\/yeyo\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Crear procedimientos almacenados en Postgresql - El Blog de Jose Luis Estevez","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.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/","og_locale":"es_ES","og_type":"article","og_title":"Crear procedimientos almacenados en Postgresql - El Blog de Jose Luis Estevez","og_description":"A continuaci\u00f3n quiero guiarles paso a paso para desarrollar una aplicaci\u00f3n\u00a0empresarial del mundo real usando tecnolog\u00eda libre o de f\u00e1cil acceso la cual puede ser usada como base para el desarrollo de una aplicaci\u00f3n. En esta entrada vamos a crear la capa de modelo de datos la cual la vamos a hacer con postgressql para [&hellip;]","og_url":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/","og_site_name":"El Blog de Jose Luis Estevez","article_published_time":"2015-11-01T15:36:08+00:00","article_modified_time":"2017-02-01T11:28:06+00:00","og_image":[{"width":1159,"height":704,"url":"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/pgadmin.png","type":"image\/png"}],"author":"yeyo","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"yeyo","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/#article","isPartOf":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/"},"author":{"name":"yeyo","@id":"https:\/\/www.joseluisestevez.com\/#\/schema\/person\/6a17b38fcac664fdb33a5fba8056d0ee"},"headline":"Crear procedimientos almacenados en Postgresql","datePublished":"2015-11-01T15:36:08+00:00","dateModified":"2017-02-01T11:28:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/"},"wordCount":345,"image":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/pgadmin.png","keywords":["PgSQL","Postgresql","SQL"],"articleSection":["PgSql","Postgresql","SQL","Stored Procedures"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/","url":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/","name":"Crear procedimientos almacenados en Postgresql - El Blog de Jose Luis Estevez","isPartOf":{"@id":"https:\/\/www.joseluisestevez.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/#primaryimage"},"image":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/pgadmin.png","datePublished":"2015-11-01T15:36:08+00:00","dateModified":"2017-02-01T11:28:06+00:00","author":{"@id":"https:\/\/www.joseluisestevez.com\/#\/schema\/person\/6a17b38fcac664fdb33a5fba8056d0ee"},"breadcrumb":{"@id":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/#primaryimage","url":"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/pgadmin.png","contentUrl":"https:\/\/www.joseluisestevez.com\/wp-content\/uploads\/2015\/11\/pgadmin.png","width":1159,"height":704},{"@type":"BreadcrumbList","@id":"https:\/\/www.joseluisestevez.com\/index.php\/2015\/11\/01\/modelo-de-datos-y-procedimientos-almacenados-en-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.joseluisestevez.com\/"},{"@type":"ListItem","position":2,"name":"Crear procedimientos almacenados en Postgresql"}]},{"@type":"WebSite","@id":"https:\/\/www.joseluisestevez.com\/#website","url":"https:\/\/www.joseluisestevez.com\/","name":"El Blog de Jose Luis Estevez","description":"Desarrollador Senior","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.joseluisestevez.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.joseluisestevez.com\/#\/schema\/person\/6a17b38fcac664fdb33a5fba8056d0ee","name":"yeyo","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3565e9dac43d5a8d2b807866a3af3ab66eeacb68b2d28fc63b962ad40c6ef4c7?s=96&d=mm&r=g","caption":"yeyo"},"description":"Arquitecto de Software emprendedor con ardua experiencia en el camino de la tecnolog\u00eda.","sameAs":["http:\/\/www.joseluisestevez.com"],"url":"https:\/\/www.joseluisestevez.com\/index.php\/author\/yeyo\/"}]}},"_links":{"self":[{"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/posts\/138","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/comments?post=138"}],"version-history":[{"count":9,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/posts\/138\/revisions"}],"predecessor-version":[{"id":380,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/posts\/138\/revisions\/380"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/media\/162"}],"wp:attachment":[{"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/media?parent=138"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/categories?post=138"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joseluisestevez.com\/index.php\/wp-json\/wp\/v2\/tags?post=138"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}