Rails PostgreSQL проверяет, является ли столбец виртуальным - PullRequest
4 голосов
/ 24 января 2020

PostgreSQL 12 имеет классную функцию Генерируемые столбцы , но я не могу проверить, является ли столбец виртуальным или нет в Rails.

Для справки, MySQL Адаптер в Rails позволяет делать то же самое, что и

MyModel.supports_virtual_columns?
=> true
MyModel.columns.last.virtual?
=> false

Но в адаптере PostgreSQL вы не можете сделать то же самое, несмотря на то, что он поддерживает сгенерированные поля?

Rails v.5.1. 7

1 Ответ

1 голос
/ 26 января 2020

Тот факт, что PostgreSQL 12 реализует сгенерированные столбцы, не означает, что у вас будет интерфейс через Rails PostgreSQLAdapter для проверки, является ли столбец виртуальным или нет, потому что он не реализован (пока).

Если вы видите в ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter, код для supports_virtual_columns? довольно прост:

def supports_virtual_columns?
  mariadb? || database_version >= "5.7.5"
end

В то время как код для проверки, является ли столбец виртуальным или нет, указывается как:

def virtual?
  /\b(?:VIRTUAL|STORED|PERSISTENT)\b/.match?(extra)
end

, который проверяет, совпадает ли значение Extra, возвращаемое из запроса

SHOW FULL FIELDS FROM table_name;

для этого столбца, с VIRTUAL, STORED или PERSISTENT, если это так, он возвращает true.

Но это не существует в PostgreSQL аналоге. supports_virtual_columns? вернет false в любом адаптере, где эта функция не разработана, как определено в ActiveRecord::ConnectionAdapters::AbstractAdapter для возврата false:

# Does this adapter support virtual columns?
def supports_virtual_columns?
  false
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...