Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  tablespace.c

  Sprache: C
 

/*
 * tablespace.c
 *
 * tablespace functions
 *
 * Copyright (c) 2010-2025, PostgreSQL Global Development Group
 * src/bin/pg_upgrade/tablespace.c
 */


#include "postgres_fe.h"

#include "pg_upgrade.h"

static void get_tablespace_paths(void);
static void set_tablespace_directory_suffix(ClusterInfo *cluster);


void
init_tablespaces(void)
{
 get_tablespace_paths();

 set_tablespace_directory_suffix(&old_cluster);
 set_tablespace_directory_suffix(&new_cluster);

 if (os_info.num_old_tablespaces > 0 &&
  strcmp(old_cluster.tablespace_suffix, new_cluster.tablespace_suffix) == 0)
  pg_fatal("Cannot upgrade to/from the same system catalog version when\n"
     "using tablespaces.");
}


/*
 * get_tablespace_paths()
 *
 * Scans pg_tablespace and returns a malloc'ed array of all tablespace
 * paths. It's the caller's responsibility to free the array.
 */

static void
get_tablespace_paths(void)
{
 PGconn    *conn = connectToServer(&old_cluster, "template1");
 PGresult   *res;
 int   tblnum;
 int   i_spclocation;
 char  query[QUERY_ALLOC];

 snprintf(query, sizeof(query),
    "SELECT pg_catalog.pg_tablespace_location(oid) AS spclocation "
    "FROM pg_catalog.pg_tablespace "
    "WHERE spcname != 'pg_default' AND "
    "  spcname != 'pg_global'");

 res = executeQueryOrDie(conn, "%s", query);

 if ((os_info.num_old_tablespaces = PQntuples(res)) != 0)
  os_info.old_tablespaces =
   (char **) pg_malloc(os_info.num_old_tablespaces * sizeof(char *));
 else
  os_info.old_tablespaces = NULL;

 i_spclocation = PQfnumber(res, "spclocation");

 for (tblnum = 0; tblnum < os_info.num_old_tablespaces; tblnum++)
 {
  struct stat statBuf;

  os_info.old_tablespaces[tblnum] = pg_strdup(PQgetvalue(res, tblnum, i_spclocation));

  /*
   * Check that the tablespace path exists and is a directory.
   * Effectively, this is checking only for tables/indexes in
   * non-existent tablespace directories.  Databases located in
   * non-existent tablespaces already throw a backend error.
   * Non-existent tablespace directories can occur when a data directory
   * that contains user tablespaces is moved as part of pg_upgrade
   * preparation and the symbolic links are not updated.
 */

  if (stat(os_info.old_tablespaces[tblnum], &statBuf) != 0)
  {
   if (errno == ENOENT)
    report_status(PG_FATAL,
         "tablespace directory \"%s\" does not exist",
         os_info.old_tablespaces[tblnum]);
   else
    report_status(PG_FATAL,
         "could not stat tablespace directory \"%s\": %m",
         os_info.old_tablespaces[tblnum]);
  }
  if (!S_ISDIR(statBuf.st_mode))
   report_status(PG_FATAL,
        "tablespace path \"%s\" is not a directory",
        os_info.old_tablespaces[tblnum]);
 }

 PQclear(res);

 PQfinish(conn);
}


static void
set_tablespace_directory_suffix(ClusterInfo *cluster)
{
 /* This cluster has a version-specific subdirectory */

 /* The leading slash is needed to start a new directory. */
 cluster->tablespace_suffix = psprintf("/PG_%s_%d",
            cluster->major_version_str,
            cluster->controldata.cat_ver);
}

Messung V0.5 in Prozent
C=91 H=95 G=92

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=141584
#Domains=738142