Entrevista con: Jaime Casanova
Entrevista realizada por: Andreas Scherbaum
PostgreSQL es la base de datos relacional de código abierto más avanzada del mundo. La serie de entrevistas «Persona de la Semana de PostgreSQL» presenta los que hacen del proyecto lo que es hoy. Aquí pueden leer todas las entrevistas.
Por favor, háblanos de ti, y de tus orígenes.
Me llamo Jaime Casanova y estoy entrando en los 40.
Soy de Ecuador, un pequeño país de Sudamérica; un lindo lugar para visitar, con playas, sierras, selvas, además de grandes ciudades… Sobre todo, recomendaría a cualquiera visitar las Islas Galápagos. Soy también ciudadano chileno por mi papá y tengo un pequeño porcentaje de sangre italiana por el abuelo de mi mamá.
He organizado algunos PGDay en Ecuador, el último fue en el 2017. No es tan sencillo realizar conferencias aquí, aunque mi sueño es organizar una en las Islas Galápagos. 😉
¿A qué dedicas tu tiempo libre? ¿Cuáles son tus intereses?
«¿Ustedes tienen tiempo libre?» 😉
Postgres ha sido mi pasión mucho antes de que se convirtiera en una actividad laboral, así que sigo dedicando mucho tiempo a “jugar” con él. Pero, si por alguna razón no estoy haciendo algo que tenga que ver con Postgres, entonces estoy visitando amigos o saliendo a comer (con amigos, por supuesto). En los días festivos con buen tiempo me gusta ir a la playa.
¿Cuál es el último libro que leíste? ¿O un libro que recomendarías a los lectores?
Un libro que leo siempre es la Biblia, y es mi principal recomendación para cualquiera. ¡Léanla todos los días!
También me gusta leer novelas de detectives, especialmente las de Agatha Christie. Ella tenía la habilidad de presentar todos los indicios sin que el lector logre entender el cuadro completo sino hasta el final del libro. Bueno, a veces sí es posible si uno espera lo inesperado. He leído al menos el 80% de sus libros.
¿Cuál es tu película o programa favorito?
La saga de Star Wars, y sobre todo cualquier género de ciencia ficción/fantasía por allí.
¿Cuál sería tu fin de semana ideal?
Sería en un resort todo incluido en la playa. O, como alternativa, cine y pizza con los amigos.
¿Cuál es el mejor consejo que recibiste?
Confieso que, al haber utilizado software propietario, no libre durante algún tiempo, al principio me molestó. Pero tras intentarlo y comprobar que no era tan difícil, se convirtió en mi primera contribución de código a PostgreSQL.
¿Cuándo empezaste a utilizar PostgreSQL y por qué?
Fue alrededor del 2003 cuando estaba terminando la universidad. Para el proyecto final ya estaba decidido que se usaría código abierto y había que elegir entre MySQL y PostgreSQL. Fui seleccionado para defender «¿por qué usar Postgres?», y desde entonces me ha gustado.
¿Recuerdas con qué versión de PostgreSQL empezaste?
La 7.2, aunque por poco tiempo. Lo recuerdo porque en esa época para declarar una función para trigger se usaba «RETURNS OPAQUE». Pero en cuanto estuvo disponible la 7.3 pasé a ella.
¿Estudiaste en una universidad? Si es así, ¿se trataba de algo relacionado con la informática? ¿Fueron tus estudios útiles para tu actual trabajo?
Estudié en una de las mejores universidades de Ecuador, la ESPOL (Escuela Superior Politécnica del Litoral), aunque en aquella época prácticamente no se enseñaba nada más que a usar GUIs no libres, FoxPro y similares.
En realidad, cuando empecé la universidad en el año 1998, los ordenadores eran un campo relativamente nuevo aquí. El año anterior había adquirido mi primera computadora. Así que aprender DOS y su lenguaje scripting «batch» me hizo feliz durante un tiempo hasta que aprendí a usar Linux y a hacer scripts en bash. Aprender el lenguaje C básico fue una de las mejores cosas que conseguí en la universidad. También aprendí los conceptos básicos de las bases de datos.
Tuve excelentes profesores que daban más de lo habitual y me enseñaron a analizar y resolver problemas, a no optar por el camino fácil, y también me enseñaron los fundamentos de la depuración.
¿Qué otras bases de datos utilizas? ¿Cuál es tu favorita?
En el pasado utilicé Informix y usé muy brevemente SQL Server y … (cof) Access (cof). Sin embargo, prefiero PostgreSQL a cualquiera de ellos en todo momento.
¿En qué proyectos relacionados con PostgreSQL estás trabajando actualmente?
Estoy promoviendo Postgres a potenciales nuevos clientes.
¿Cómo contribuyes a PostgreSQL?
Por lo general, reviso los parches y busco errores. Sé que no soy el mejor programador y que la mayoría de los parches actuales exceden mis habilidades como revisor de código. Sin embargo, hago todo lo posible por entender «qué problema intenta resolver el parche» y «cómo intenta resolverlo». En base a las respuestas obtenidas, y a la inspección del código modificado, intento elaborar las pruebas correspondientes.
He comprobado que algunos problemas no se producen hasta que se hayan introducido suficientes datos en la base de datos (más de los existentes en la base de datos de regresión), o quizá el factor detonante sea la existencia de tuplas muertas, la concurrencia o las combinaciones de GUCs. Cuando ya no tengo más ideas, simplemente dejo que SQLsmith se ejecute durante bastante tiempo en una base de datos preparada específicamente.
También soy miembro de la junta directiva de la PostgreSQL Community Association of Canada (la organización sin fines de lucro que posee todos los bienes del proyecto, como los nombres de dominio y las marcas comerciales).
¿Hiciste alguna contribución a PostgreSQL que no implique la escritura de código?
Me gusta dar charlas en las conferencias, especialmente en español. Ya he presentado propuestas de charlas para 3 diferentes conferencias y espero ser seleccionado en al menos una de ellas.
Y trato de ayudar a los usuarios de postgres a través de pgsql-es-ayuda@postgresql.org o de un grupo de telegram en español de postgresql (@PostgreSQLes puedes unirte aquí) del que formo parte.
¿Cuál es su extensión favorita de PostgreSQL?
¡unaccent y pg_trgm me han sido muy útiles!
Existen muchísimas aplicaciones que utilizan el patrón «field like ‘%loquesea%'». Esta es una idea horrible que acaba con el rendimiento. Y aunque una mejor solución normalmente supone la «normalización de la base de datos», un truco rápido consiste en crear un índice GIN en el campo utilizando «gin_trgm_ops». También unaccent resulta muy útil puesto que en español muchas palabras llevan tilde, y es normal que la gente las escriba de forma correcta a la hora de guardarlas en la base de datos, para luego ignorar las tildes a la hora de realizar una búsqueda.
¿Qué es lo más molesto que se te ocurre de PostgreSQL? ¿Y existe alguna posibilidad de solucionarlo?
El sistema «Large Object«. Recomiendo a todo el mundo que se aleje de él y opte por los campos ByteA. La razón principal es que pg_largeobject tiende a aumentar de tamaño y no existe una manera sencilla de moverlo a un tablespace diferente y sencillamente no hay manera de particionarlo; tampoco admite la replicación lógica y otras advertencias.
El principal problema es que pg_largeobject es un catálogo y no una tabla de usuario, lo cual impide la mayoría de las operaciones normales. La única solución que se me ocurre para ese problema es no usarlo y, en su lugar, escribir los «objetos grandes» (o blobs, como se conocen en otros sistemas) en un campo ByteA, preferiblemente no en la misma tabla que el resto de los datos.
¿Cuál es la característica que más te gusta de la última versión de PostgreSQL?
Se trata de todo el trabajo que se ha realizado en el área del particionamiento, no solo en la última versión, sino en las 4 últimas.
Por ejemplo, la posibilidad de realizar la eliminación de particiones en un join incluso si las mismas no coinciden perfectamente entre dos tablas particionadas; también la posibilidad de crear claves foráneas que apunten a una tabla particionada me facilita la vida y representa una gran mejora en el rendimiento.
Además, ¿qué característica o mecanismo te gustaría ver en PostgreSQL? ¿Y por qué?
Una mejor replicación lógica nativa. Nos falta mucho trabajo en esa área para llegar al nivel de pglogical. Además, tener la posibilidad de realizar el failover a una réplica lógica o, por lo menos, poder proteger una réplica lógica con un standby y realizar el failover en ese standby para que la replicación lógica continúe…
También una mejor observabilidad, con las consultas paralelas. He visto sistemas que se vuelven lentos porque muchas consultas se paralizan. Lamentablemente no es tan sencillo saber qué está haciendo una determinada CPU, ni qué usuario está utilizando más las CPUs o qué consulta es más intensiva en una CPU. Lo mismo ocurre con el consumo de memoria.
¿Podrías describir tu caja de herramientas de desarrollo para PostgreSQL?
vim, tig (recientemente sustituido por un script que utiliza git difftool y vimdiff), psql para mi uso con Postgres.
¿Qué habilidades son imprescindibles para contribuir a PostgreSQL?
Yo diría que la imaginación es la principal. También saber leer y escribir en inglés y entender los lenguajes SQL y C
¿A qué conferencias de PostgreSQL sueles asistir? ¿Presentas charlas?
Normalmente las de Latinoamérica. Principalmente la pgconfbr en Brasil, aunque estaré encantado de ofrecer charlas en cualquier otra conferencia de Latinoamérica. He dado charlas en Argentina, Bolivia, Chile, Cuba, Perú y España.
También tuve la oportunidad de dar una charla en la pgconf en NYC.
La última conferencia a la que asistí fue en 2019. Esperaba que este año pudiera asistir en persona por primera vez a pgcon.org, pero parece que será una conferencia online… Quizás en 2023.
¿Crees que Postgres tenga una elevada barrera de entrada?
Sí y no. Postgres posee muchas funcionalidades y características avanzadas y puede reemplazar fácilmente a la mayoría de las bases de datos. Sin embargo, poca gente conoce todas esas funcionalidades, y aunque a mí me gusta escribir scripts, la mayoría de la gente busca velocidad (lo que significa herramientas que ayuden a configurar y optimizar).
Además, el hecho de que no exista una certificación oficial o respaldada por la comunidad, complica las cosas para las empresas de soporte no tan grandes; sé que no es un problema tan sencillo de resolver. Hace unos años participé en un intento de establecer un pensum respaldado por la comunidad en el que las empresas pudieran basar sus certificaciones. La idea era que si una empresa se atenía al pensum indicado, podría considerarse como certificada por la comunidad. Lamentablemente, el hecho de que Postgres lance una nueva versión principal cada año y que cada nueva versión incluya avances importantes, hizo que ese trabajo fuera difícil de completar, hasta el punto de ser abandonado.
¿Qué consejo darías a quienes quieran empezar a desarrollar PostgreSQL, es decir, a contribuir al proyecto? ¿Por dónde y cómo deberían empezar?
Lean documentos, empiecen a seguir -hackers, encuentren algo adecuado en el Todo, investiguen por qué no se ha desarrollado todavía, y repitan el proceso una y otra vez hasta que se sientan cómodos.
Otra forma de empezar es revisando los parches de Commitfest.
¿Crees que PostgreSQL estará presente durante muchos años en el futuro?
Así lo espero, ya que vivo de eso 😉
El hecho de que Postgres sea de código abierto y cuente con una sólida comunidad libre hace que esto sea una certeza.
¿Recomendarías Postgres para fines comerciales o para proyectos paralelos?
Para fines comerciales, definitivamente. ¡Llámenos para solicitar soporte! 😉
Yo también lo uso para mis proyectos paralelos, y también para consultar la hora en diferentes zonas horarias 🙂
¿Lees la lista de correo -hackers? ¿Y alguna otra lista?
Sigo a -hackers tanto como pueda, y también a -es-ayuda.