私はCommon Lisp ORMを使って簡単なデータベースを作ろうとしています。私はPostgreSQLとCLSQLを使用します。クラスを作成してテーブルを生成することもできますが、生成された値を取得するためにプライマリキーを使用せずに値を挿入する場合は機能しません。それはmysqlデータベースで動作するようです。 PostgreSQLでそれを行うことは可能ですか?clsqlを使ったpostgresqlの自動生成された主キー
私は主キーとして定義します:
(id :db-kind :key
:db-type "serial"
:db-constraints (:not-null :unique)
:type integer
:initarg :id)
をそして、私はこのエラーを取得する:
While accessing database #<POSTGRESQL-DATABASE localhost/cl_ormex/postgres OPEN {1004FCC403}>
with expression "SELECT currval ('NIL')":
Error 42P01/relation "nil" does not exist
LINE 1: SELECT currval ('NIL')
^
has occurred.
[Condition of type SQL-DATABASE-DATA-ERROR]
私はSBCL 1.3.1でのPostgreSQL 9.5.2を使用します。
編集
はここに例を示します
(require 'clsql)
(defpackage :orm-ex (:use :cl :clsql))
(in-package :orm-ex)
(file-enable-sql-reader-syntax)
(enable-sql-reader-syntax)
(setf *default-caching* nil)
(connect '("localhost" "examp" "postgres" "postgres")
:database-type :postgresql)
(def-view-class person()
((id :db-kind :key
:db-type "serial"
:db-constraints (:not-null :unique)
:type integer
:initarg :id
:accessor person-id)
(name :type (varchar 30)
:initarg :name
:accessor person-name)))
(defparameter person1
(make-instance 'person
:name "Matt"))
(dolist (c '(person)) (create-view-from-class c))
(update-records-from-instance person1)
私は本当にこのエラーを理解していないが、行がデータベースに挿入されているように見えます。
完全な最小限の例が参考になるでしょうし、stacktrace。 – Svante
OK。私は例を追加しました... –
実際には、すべてのフィールドが挿入されていることに気付きましたが、IDスロットはまだオブジェクト内で定義されていません... –