| Начало » Использование СУБД » Firebird, HQbird, InterBase » Что такое db_key (и как с ним бороться?) Переход к форуму:
	| 
		
			| Что такое db_key [сообщение #3665] | Tue, 07 November 2023 19:34  |  
			| 
				
				
					|  shalamyansky Сообщений: 150
 Зарегистрирован: August 2022
 | Senior Member |  |  |  
	| В разных уголках документаций и статей попадаются упоминания о таком явлении природы, как rdb$db_key, однако места силы, чтобы пришло понимание, найти не могу. Интуитивно эта штука воспринимается как дополнительное необъявленное поле, однако, по всей видимости, это не так. 
 Думал было использовать, но столкнулся с непонятками.
 
 Создаем и наполняем таблицу
 
 Показать скрытый текстИзучаем на предмет rdb$db_key:
create table test (
    id  integer not null
);
alter table test add constraint pk_test primary key (id);
insert into test ( id ) values ( 1 );
 
 Пытаемся искать по rdb$db_key:
SQL> select rdb$db_key, id from test;
DB_KEY                     ID
================ ============
8000000001000000            1
 И как это понимать?
SQL> select * from test where rdb$db_key = 8000000001000000;
<empty result>
SQL> select * from test where rdb$db_key = '8000000001000000';
<empty result>
 |  
	|  |  |  
	|  |  
	|  |  
	| 
		
			| Re: Что такое db_key [сообщение #3673 является ответом на сообщение #3665] | Wed, 08 November 2023 18:37   |  
			| 
				
				
					|  shalamyansky Сообщений: 150
 Зарегистрирован: August 2022
 | Senior Member |  |  |  
	| Ага, так работает, спасибо. 
 Отсюда можно узнать, что rdb$db_key имеет тип varbinary( 8 ), что для впервые столкнувшегося неочевидно. Еще способом догадаться был документ Firebird 4.0.3 Release Notes, раздел про функцию MAKE_DBKEY (авт. Vlad Khorsun).
 
 ИМХО, конструкция rdb$db_key является элементом языка Firebird SQL, и было бы неплохо, если бы она была описана в соответствующей документации. Сама по себе, а не только в примерах к функции MAKE_DBKEY. Кстати, в описании языка тип возвращаемого значения этой функции тоже опущен.
 |  
	|  |  |  
	|  |  
	|  |  
	|  |  
	|  |  
	| 
		
			| Re: Что такое db_key [сообщение #3678 является ответом на сообщение #3673] | Thu, 09 November 2023 09:43   |  
			| 
				
				
					|  sim_84 Сообщений: 355
 Зарегистрирован: June 2022
 | Senior Member |  |  |  
	| Добавить описание системных столбцов RDB$DB_KEY и RDB$RECORD_VERSION таблицы можно, вот только не понятно в какой раздел это поместить. 
 MAKE_DBKEY возвращает не varbinary( 8 ), а binary( 8 ). Это добавлю.
 
 
 [Обновления: Thu, 09 November 2023 09:44] Известить модератора |  
	|  |  |  
	|  |  
	|  |  
	|  |  
	|  |  
	| 
		
			| Re: Что такое db_key [сообщение #3683 является ответом на сообщение #3678] | Thu, 09 November 2023 15:23   |  
			| 
				
				
					|  shalamyansky Сообщений: 150
 Зарегистрирован: August 2022
 | Senior Member |  |  |  
	| sim_84 писал(а) Thu, 09 November 2023 09:43 Добавить описание системных столбцов RDB$DB_KEY и RDB$RECORD_VERSION таблицы можно, вот только не понятно в какой раздел это поместить.Дык в спецификацию операторов, где они появляются:
 
 Тут просто необходимо для корректного полного формального описания. ИМХО. Ну и дальше лирический текст с пояснением.
SELECT
  [...]
  [DISTINCT | ALL] <select_list>
  [...]
  FROM ...
<select_list> ::= * | <output_column> [, <output_column> ...]
<output_column> ::=
  <qualifier>.*
  | <value_expression> [COLLATE collation] [[AS] alias]
  <value-expression> ::=
    [<qualifier>.]col_name
  | [<qualifier>.]selectable_SP_outparm
  | <literal>
  | <context-variable>
  | <function-call>
  | <single-value-subselect>
  | <CASE-construct>
  | <other-single-value-expr>
  | [<qualifier>.]<pseudo_column>
<pseudo_column> ::= rdb$db_key | rdb$record_version
[Обновления: Thu, 09 November 2023 15:31] Известить модератора |  
	|  |  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	| 
		
			| Re: Что такое db_key [сообщение #3706 является ответом на сообщение #3705] | Sat, 11 November 2023 22:17   |  
			| 
				
				
					|  hvlad Сообщений: 381
 Зарегистрирован: August 2022
 | Senior Member |  |  |  
	| SD писал(а) Sat, 11 November 2023 14:01 "Если что-то ходит как утка..."Не нужно кривых аналогий, они очень редко работают.
 Если транзакция каким-то образом получает все качества (область видимости) другой транзакции (за исключением, может быть, номера, хотя ничто не мешает получить и его), она становится той другой транзакцией. И да, переведи мне, пожалуйста
 Цитата:
 to create parallel (via different attachments) processes reading consistent data from a databaseможет, тут вовсе не говорится о стабильности одних и тех же данных данных в разных подключениях?.. Если бы было так, как тебе приснилось, то любые изменения в рамках такой "общей" тр-ции должны были бы быть доступны всем её пользователям.
 Завершение "общей" тр-ции любым пользователем стало бы сюрпризом для остальных.
 Про сейвпойнты я даже говорить не стану.
 
 В приведенной тобой цитате говорится о чтении согласованных данных и ни о чём большем.
 Не нужно пустых спекуляций. И кривых аналогий тоже не нужно.
 |  
	|  |  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  |  
	|  | 
 
 
 Текущее время: Fri Oct 31 06:18:32 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.02480 секунд |