clojure连接postgres

主要关注访问pg。不关心其他db

1 clojure.java.jdbc

http://clojure-doc.org/articles/ecosystem/java_jdbc/reusing_connections.html

这个最广,需要配合不同DB

[org.clojure/java.jdbc "0.7.9"]
[org.postgresql/postgresql "42.2.5"]

问题是,每次查询都要单独连接一次db, 原生只支持3种复用方式:

Using with-db-connection

Using with-db-transaction

Using Connection Pooling(第三方)

没有通常的connection cursor 机制,不知道怎么想的……

懒得搭理,不贴代码了。

2 jdbc.core

:dependences

[funcool/clojure.jdbc "0.9.0"]

使用时

(require ‘[jdbc.core :as jdbc])

https://funcool.github.io/clojure.jdbc/latest/#introduction

这个中规中矩的。有通常的connection cursor ,但是连接db时用的db-spec的定义和前面那个不一样,另搞了一套,也没什么可说的。平淡无奇,感觉就是py里的psycopg2

3 korma

这个更类似SQLalchmey,访问哪个table前,还要声明一下table格式,疯了! 就是为了摆脱这种OO风格才投奔lisp的啊啊啊!

4 clj-postgresql

https://github.com/remodoy/clj-postgresql

这个因为专门针对pg,所以优点很多:

1 支持用环境变量PGHOST, PGPORT, PGUSER PGDATABASE隐式定义连接 免去db-spec这种硬编码,不但节省代码行数,也对运行在docker容器里的应用特别方便。docker-compose里设置就好了。

2 在兼容clojure.java.jdbc的query语句前提下,简洁实现了类似cursor的connection pool pg/pool,可以直接

(j/query @db ["select * from schema.table"])

2 居然支持postgis的类型!

这才是真正节约废话套话,专注表达的库

那么就用它了!

:dependences

[clj-postgresql "0.7.0"]

这个库发布好几年了,算上我的一票,在github只有区区91颗星而已。和PY动辄上千相比,用Clojure的人真的很少啊

总结

每个库为了避免直接写SQL,都搞一套微型、阉割版的DSL,我实在不喜欢这样。

其实SQL本身表达能力已经非常好了,连接数据库也是个标准问题,为什么宁可自己发明DSL小方言,不去学SQL大外语。 不可理解。

SQL的背后是集合、数论,一阶谓词逻辑;

而LISP的背后是lambda演算。

其实正好优势互补:

SQL存储状态,或者说事实的集合,解决基于集合的计算与查询,  特别烦的复杂查询直接交给lisp就好了;

而LISP

原文地址:https://www.cnblogs.com/xuanmanstein/p/10795496.html

时间: 2024-10-29 10:26:31

clojure连接postgres的相关文章

Metasploit连接postgres数据库

操作环境为Kali虚拟机 [email protected]:~# apt-get install postgresql 启动服务 [email protected]:~# service postgresql start [ ok ] Starting PostgreSQL 9.1 database server: main. 修改postgresql密码为toor: [email protected]:~# sudo -u postgres psql postgres postgres=#

连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑

由于是开发阶段,所以并没有配置postgres的参数,都是使用安装时的默认配置,以前运行也不见得有什么不正常,可是前几天我的cpu资源占用突然升高.查看进程,发现有一个postgres的进程占用CPU都是80%以上,而且居高不下: 刚开始以为是配置上需要修改,但事实上,默认配置基本上是很优化的,而且是开发阶段,数据量也并不大.后来通过分析,得出结论,解决问题应该从以下几个方面来逐一考虑: 1,SQL查询方面检查数据检索的索引是否建立,凡是需要查找的字段尽量建立索引,甚至是联合索引:创建索引,包括

kaili 2.0 连接postgres数据库

第一步:使用命令 db_init 初始化数据库 第二步:查看Creating configuration file里面保存了数据库的账号密码 第三步:进入到msfconsole下面执行 db_connect username:[email protected]/database(根据上一步文件内的内容进行连接)

远程连接postgres,出现server doesnt listen

已修改pg_hdb.conf中的 # IPv4 local connections: host    all             all             127.0.0.1/32            md5 在下面添加一行代码: host    all             all             0/0            md5  //所有用户都能访问 http://blog.sina.com.cn/s/blog_7750745b0101ewm2.html 解决办法

Postgres远程访问配置

在服务器上安装了Postgres数据库,然后通过客户端工具pgAdminIII来远程访问的过程中发现提醒服务器没有启动监听的错误.解决方法如下: 编辑Postgres安装路径下的/data/pg_hba.conf 文件: e.g: # TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD # IPv4 local connections:host    all         all         127.0.0.1/32    

Postgresql 远程连接配置

原文地址:http://blog.chinaunix.net/uid-20684384-id-1895247.html 1. 设置远程访问认证机制 编辑 $POSTGRES/data/pg_hba.conf 文件, # TYPE DATABASE USER CIDR-ADDRESS METHOD # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: #host all all ::1/1

thinkphp 连接postgresql

PHP连接: php.ini中将extension=php_pgsql.dll前面的分号去掉,然后设置extension_dir指向php文件下的ext文件夹. 正常情况下这样php就可以连接postgres了,但是我的仍然出错,提示“Fatal error: Call to undefined function pg_connect()”,查看Apache的日志,“PHP Startup: Unable to load dynamic library '****\\PHP5\\ext\\php

java 连接 postgresql

最近公司用postgresql这个数据库,看网上说这个数据库还算好用,自己就用了一下,我就是用java连接了一下数据库. 其实每个数据库的连接方式大致相同,只是用到的驱动不同,用不同数据库只需要换不同的数据库驱动包. 项目结构 代码 DBHelper package com.xxx.postgrepsql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; /

GitLab安装说明

http://blog.csdn.net/huangzhijie3918/article/details/51330425 GitLab,是一个使用 Ruby on Rails 开发的开源应用程序,与Github类似,能够浏览源代码,管理缺陷和注释,非常适合在团队内部使用. gitlab是基于Ruby on Rails的,安装和配置非常麻烦,不过有傻瓜安装包,https://about.gitlab.com/downloads/,或者,https://bitnami.com/stack/gitl