function Schema::findPrimaryKeyColumns

Finds the primary key columns of a table, from the database.

Parameters

string $table: The name of the table.

Return value

string[]|false A simple array with the names of the columns composing the table's primary key, or FALSE if the table does not exist.

Overrides Schema::findPrimaryKeyColumns

File

core/lib/Drupal/Core/Database/Driver/pgsql/Schema.php, line 811

Class

Schema
PostgreSQL implementation of \Drupal\Core\Database\Schema.

Namespace

Drupal\Core\Database\Driver\pgsql

Code

protected function findPrimaryKeyColumns($table) {
  if (!$this->tableExists($table)) {
    return FALSE;
  }
  // Fetch the 'indkey' column from 'pg_index' to figure out the order of the
  // primary key.
  // @todo Use 'array_position()' to be able to perform the ordering in SQL
  //   directly when 9.5 is the minimum  PostgreSQL version.
  $result = $this->connection
    ->query("SELECT a.attname, i.indkey FROM pg_index i JOIN pg_attribute a ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) WHERE i.indrelid = '{" . $table . "}'::regclass AND i.indisprimary")
    ->fetchAllKeyed();
  if (!$result) {
    return [];
  }
  $order = explode(' ', reset($result));
  $columns = array_combine($order, array_keys($result));
  ksort($columns);
  return array_values($columns);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.