I have created a schema with views on top of tables.
We use JDBC to connect to the schema and we use JBuilderX to develop our
app.
Every table as an "id" column of type serial. I.e. It is not null with
default nextval(...).
However, it seems that when a column from a table is used in a view, the
not null part (as well as the default values) seems to be dropped.
Serials become integers.
I can use "alter table" to restore default values on the views, but
"alter table" to make a view column not null results in an error saying
that the viewname is not a table! I.e. I don't seem to be able to make
the column not null.
I think that this is throwing JBuilder's resolver into chaos because it
doesn't use the column that I have specified as ROWID (column "id" for
each view) to resolve update rows back to the view, it tries to use
every single column, a sure sign that it thinks that the column I have
told it is a rowid isn't up to the job. I am pretty certain that it's
because it thinks that column can be null.
Unfortunately I have to use views and cannot use tables because of
security in the app. The views have rules set on them as well as
permissions to specific users. So the answer isn't to open up the
database and use the underlying tables instead. That would open a
security hole in the app. Moreover, I use views to do complex processing
in PG (e.g. multi-table joins or rules and triggers on updates to ensure
data integrity and implement business logic). JBuilder, being a RAD is
great at building apps from simple datasets (i.e. single views and
tables), but it quickly starts to wilt under complex parametised queries!
So for these reasons I need to find a way to tell JBuilder (through
JDBC) that the ID columns are not nullable. But how? Can someone please
help me?
Thanks,
Brad