PostgreSQL Source Code: src/bin/pg_upgrade/server.c Source File (original) (raw)

1

2

3

4

5

6

7

8

9

11

16

18

19

20

21

22

23

24

25

26

29{

31

33 {

35

38

39 printf(_("Failure, exiting\n"));

40 exit(1);

41 }

42

44

46}

47

48

49

50

51

52

53

54

55

58{

61

62

70 {

73 }

74

78}

79

80

81

82

83

84

85

86

87

88

89

90

91char *

93{

95

96 if (buf == NULL)

98 else

100

102 {

106 }

109

110 return buf->data;

111}

112

113

114

115

116

117

118

119

120

123{

125 va_list args;

128

129 va_start(args, fmt);

131 va_end(args);

132

136

138 {

143 printf(_("Failure, exiting\n"));

144 exit(1);

145 }

146 else

147 return result;

148}

149

150

151

152

153

154

155

156

157

160{

161 FILE *version_fd;

163 int v1 = 0,

164 v2 = 0;

165

166 snprintf(ver_filename, sizeof(ver_filename), "%s/PG_VERSION",

168 if ((version_fd = fopen(ver_filename, "r")) == NULL)

169 pg_fatal("could not open version file \"%s\": %m", ver_filename);

170

171 if (fscanf(version_fd, "%63s", cluster->major_version_str) == 0 ||

172 sscanf(cluster->major_version_str, "%d.%d", &v1, &v2) < 1)

173 pg_fatal("could not parse version file \"%s\"", ver_filename);

174

175 fclose(version_fd);

176

177 if (v1 < 10)

178 {

179

180 return v1 * 10000 + v2 * 100;

181 }

182 else

183 {

184

185 return v1 * 10000;

186 }

187}

188

189

190static void

192{

194}

195

196

197bool

199{

202 bool pg_ctl_return = false;

203 char socket_string[MAXPGPATH + 200];

205

206 static bool exit_hook_registered = false;

207

208 if (!exit_hook_registered)

209 {

211 exit_hook_registered = true;

212 }

213

214 socket_string[0] = '\0';

215

216#if !defined(WIN32)

217

218 strcat(socket_string,

219 " -c listen_addresses='' -c unix_socket_permissions=0700");

220

221

223 snprintf(socket_string + strlen(socket_string),

224 sizeof(socket_string) - strlen(socket_string),

225 " -c %s='%s'",

227 "unix_socket_directory" : "unix_socket_directories",

229#endif

230

232

233

234

235

236

237

238

239

240

242 appendPQExpBufferStr(&pgoptions, " -c synchronous_commit=off -c fsync=off -c full_page_writes=off");

243

244

245

246

247

248

249

250

251

254

255

256

257

258

261

262

263

264

265

267 "\"%s/pg_ctl\" -w -l \"%s/%s\" -D \"%s\" -o \"-p %d -b%s %s%s\" start",

271 pgoptions.data,

272 cluster->pgopts ? cluster->pgopts : "", socket_string);

273

275

276

277

278

279

281

285 report_and_exit_on_error, false,

286 "%s", cmd);

287

288

289 if (!pg_ctl_return && !report_and_exit_on_error)

290 return false;

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305 if (pg_ctl_return)

307

308

309

310

311

312

313

316 {

321 pg_fatal("could not connect to source postmaster started with the command:\n"

322 "%s",

323 cmd);

324 else

325 pg_fatal("could not connect to target postmaster started with the command:\n"

326 "%s",

327 cmd);

328 }

330

331

332

333

334

335

336 if (!pg_ctl_return)

337 {

339 pg_fatal("pg_ctl failed to start the source server, or connection failed");

340 else

341 pg_fatal("pg_ctl failed to start the target server, or connection failed");

342 }

343

344 return true;

345}

346

347

348void

350{

352

357 else

358 return;

359

361 "\"%s/pg_ctl\" -w -D \"%s\" -o \"%s\" %s stop",

364 in_atexit ? "-m fast" : "-m smart");

365

367}

368

369

370

371

372

373

374

375void

377{

380

381

382

384

387

389 {

390 if (option->envvar && (strcmp(option->envvar, "PGHOST") == 0 ||

391 strcmp(option->envvar, "PGHOSTADDR") == 0))

392 {

393 const char *value = getenv(option->envvar);

394

396

397 (strcmp(value, "localhost") != 0 && strcmp(value, "127.0.0.1") != 0 &&

399 pg_fatal("libpq environment variable %s has a non-local server value: %s",

401 }

402 }

403

404

406}

bool exec_prog(const char *log_filename, const char *opt_log_file, bool report_error, bool exit_on_error, const char *fmt,...)

void cluster(ParseState *pstate, ClusterStmt *stmt, bool isTopLevel)

#define ALWAYS_SECURE_SEARCH_PATH_SQL

PGconn * PQconnectdb(const char *conninfo)

void PQconninfoFree(PQconninfoOption *connOptions)

ConnStatusType PQstatus(const PGconn *conn)

void PQfinish(PGconn *conn)

PQconninfoOption * PQconndefaults(void)

char * PQerrorMessage(const PGconn *conn)

ExecStatusType PQresultStatus(const PGresult *res)

void PQclear(PGresult *res)

PGresult * PQexec(PGconn *conn, const char *query)

#define SERVER_START_LOG_FILE

#define SERVER_STOP_LOG_FILE

void void pg_log(eLogType type, const char *fmt,...) pg_attribute_printf(2

#define GET_MAJOR_VERSION(v)

static bool is_unixsock_path(const char *path)

PQExpBuffer createPQExpBuffer(void)

void initPQExpBuffer(PQExpBuffer str)

void resetPQExpBuffer(PQExpBuffer str)

void appendPQExpBuffer(PQExpBuffer str, const char *fmt,...)

void appendPQExpBufferChar(PQExpBuffer str, char ch)

void appendPQExpBufferStr(PQExpBuffer str, const char *data)

void termPQExpBuffer(PQExpBuffer str)

static PGconn * get_db_conn(ClusterInfo *cluster, const char *db_name)

void check_pghost_envvar(void)

bool start_postmaster(ClusterInfo *cluster, bool report_and_exit_on_error)

PGresult * executeQueryOrDie(PGconn *conn, const char *fmt,...)

PGconn * connectToServer(ClusterInfo *cluster, const char *db_name)

void stop_postmaster(bool in_atexit)

uint32 get_major_server_version(ClusterInfo *cluster)

char * cluster_conn_opts(ClusterInfo *cluster)

static void stop_postmaster_atexit(void)

void appendShellString(PQExpBuffer buf, const char *str)

void appendConnStrVal(PQExpBuffer buf, const char *str)

ClusterInfo * running_cluster