Я столкнулся с этой проблемой автоматического увеличения рельсов, не синхронизированной с последовательностью postgresql приложения. Это произошло потому, что я вручную добавил записи и дал им идентификатор, что означало, что у этих записей были идентификаторы, но последовательность postgresql не знала об этих записях и поэтому не увеличивала последовательность postgresql, поэтому последовательность не изменилась, и это вызвало серьезную ошибку. проблемы позже.
В любом случае, у меня есть простой вопрос, есть ли команда, которую я могу запустить, чтобы узнать, где находится последовательность postgresql для конкретной таблицы? В большинстве случаев оно (надеюсь) будет иметь то же значение, что и последний максимальный идентификатор в этой таблице, но я хочу провести некоторое исследование / проверку и, таким образом, захотеть узнать, как найти последовательность.
Примечание
Я пытался
ActiveRecord::Base.connection.execute("select currval(pg_get_serial_sequence('users', 'id'));")
И он вернулся
Traceback (most recent call last):
1: from (irb):4
ActiveRecord::StatementInvalid (PG::ObjectNotInPrerequisiteState: ERROR: currval of sequence "users_id_seq" is not yet defined in this session)
: select currval(pg_get_serial_sequence('users', 'id'));
Также обратите внимание
Я побежал (похоже на выше)
ActiveRecord::Base.connection.execute("select nextval(pg_get_serial_sequence('users', 'id'));")
И это возвращает
=> #<PG::Result:0x000000000521ce88 status=PGRES_TUPLES_OK ntuples=1 nfields=1 cmd_tuples=1>
Но я бы ожидал увидеть номер. Например. если таблица users
имеет 6000 пользователей, я ожидаю, что она вернет 6001
(следующий по порядку)