• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/db/pgsqlconnection.php
  • Класс: BitrixMainDBPgsqlConnection
  • Вызов: PgsqlConnection::createTable
public function createTable($tableName, $fields, $primary = array(), $autoincrement = array())
{
	$sql = 'CREATE TABLE '.$this->getSqlHelper()->quote($tableName).' (';
	$sqlFields = array();

	foreach ($fields as $columnName => $field)
	{
		if (!($field instanceof ScalarField))
		{
			throw new ArgumentException(sprintf(
				'Field `%s` should be an EntityScalarField instance', $columnName
			));
		}

		$realColumnName = $field->getColumnName();

		if (in_array($columnName, $autoincrement, true))
		{
			$type = 'INT GENERATED BY DEFAULT AS IDENTITY'; // size = 4

			if ($field instanceof IntegerField)
			{
				switch ($field->getSize())
				{
					case 2:
						$type = 'SMALLINT GENERATED BY DEFAULT AS IDENTITY';
						break;
					case 8:
						$type = 'BIGINT GENERATED BY DEFAULT AS IDENTITY';
						break;
				}
			}
		}
		else
		{
			$type = $this->getSqlHelper()->getColumnTypeByField($field);
		}
		$sqlFields[] = $this->getSqlHelper()->quote($realColumnName)
			. ' ' . $type
			. ($field->isNullable() ? '' : ' NOT NULL')
		;
	}

	$sql .= join(', ', $sqlFields);

	if (!empty($primary))
	{
		foreach ($primary as &$primaryColumn)
		{
			$realColumnName = $fields[$primaryColumn]->getColumnName();
			$primaryColumn = $this->getSqlHelper()->quote($realColumnName);
		}

		$sql .= ', PRIMARY KEY('.join(', ', $primary).')';
	}

	$sql .= ')';

	$this->query($sql);

}