On Thu, 8 Feb 2018, Adrian Klaver wrote:
hplc=> \d student_attendance_attendance_id_seq
Sequence "public.student_attendance_attendance_id_seq"
Column | Type | Value
---------------+---------+--------------------------------------
sequence_name | name | student_attendance_attendance_id_seq
last_value | bigint | 39590
start_value | bigint | 1
increment_by | bigint | 1
max_value | bigint | 9223372036854775807
min_value | bigint | 1
cache_value | bigint | 1
log_cnt | bigint | 0
is_cycled | boolean | f
is_called | boolean | t
Owned by: public.student_attendance.attendance_id
Assuming you showed the complete output I am not seeing the Owned by: for
your sequence. I would do the \d on one of your sequences that 'works', I am
guessing you will see Owned by: .
To correct see:
https://www.postgresql.org/docs/10/static/sql-altersequence.html
"OWNED BY table_name.column_name
OWNED BY NONE
The OWNED BY option causes the sequence to be associated with a specific
table column, such that if that column (or its whole table) is dropped, the
sequence will be automatically dropped as well. If specified, this
association replaces any previously specified association for the sequence.
The specified table must have the same owner and be in the same schema as the
sequence. Specifying OWNED BY NONE removes any existing association, making
the sequence “free-standing”.
Agggh. That's it! I'll fix the ownership.
So, a few questions:
1. How on earth did this happen? I do not recall doing any manual fiddling
with either database - they were (as far as I know) built from the same
DDL. We may never have an answer for this. Being human, who knows what I
may or may not have done 4 months ago...
But,
2. Why is the currval() function being so blasted dumb? If
'pg_get_serial_sequence' cannot resolve the sequence, it returns NULL.
As such, shouldn't the outer currval() also be returning NULL? I cannot
imagine a rationale for the current behavior.
THANKS to everyone who chimed in on this. I was beginning to think I was
losing my marbles.
--