• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/db/pgsqlconnection.php
  • Класс: BitrixMainDBPgsqlConnection
  • Вызов: PgsqlConnection::getIndexName
public function getIndexName($tableName, array $columns, $strict = false)
{
	if (empty($columns))
	{
		return null;
	}

	$tableColumns = [];
	$r = $this->query("
		SELECT a.attnum, a.attname
		FROM pg_class t
		LEFT JOIN pg_attribute a ON a.attrelid = t.oid
		WHERE t.relname = '".$this->getSqlHelper()->forSql($tableName)."'
	");
	while ($a = $r->fetch())
	{
		if ($a['ATTNUM']> 0)
		{
			$tableColumns[$a['ATTNUM']] = $a['ATTNAME'];
		}
	}

	$r = $this->query("
		SELECT relname, indkey, pg_get_expr(pg_index.indexprs, pg_index.indrelid) full_text
		FROM pg_class, pg_index
		WHERE pg_class.oid = pg_index.indexrelid
		AND pg_class.oid IN (
			SELECT indexrelid
			FROM pg_index, pg_class
			WHERE pg_class.relname = '".$this->getSqlHelper()->forSql($tableName)."'
			AND pg_class.oid = pg_index.indrelid
		)
	");
	$indexes = [];
	while ($a = $r->fetch())
	{
		$indexes[$a['RELNAME']] = [];
		if ($a['FULL_TEXT'])
		{
			$match = [];
			if (preg_match_all('/,s*([a-z0-9_]+)/i', $a['FULL_TEXT'], $match))
			{
				foreach ($match[1] as $i => $colName)
				{
					$indexes[$a['RELNAME']][$i] = mb_strtoupper($colName);
				}
			}
		}
		else
		{
			foreach (explode(' ', $a['INDKEY']) as $i => $indkey)
			{
				$indexes[$a['RELNAME']][$i] = mb_strtoupper($tableColumns[$indkey]);
			}
		}
	}

	return static::findIndex($indexes, $columns, $strict);
}