2

I cannot get environment variable in my PostgreSQL C extension code.

For example, this function always returns 111:

#include "postgres.h"
#include "fmgr.h"
#include <stdlib.h>

PG_MODULE_MAGIC;

PG_FUNCTION_INFO_V1(myinc);
Datum
myinc(PG_FUNCTION_ARGS)
{
  int32 arg = PG_GETARG_INT32(0);
  char* envar = getenv("MYINC");
  if (envar) {
    PG_RETURN_INT32(arg + atoi(envar));
  } else {
    PG_RETURN_INT32(111);
  }
}

While this C program works as expected, it prints whatever MYINC is:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  printf("MYINC: %s", getenv("MYINC"));
  return 0;
}

1 Answer 1

5

That should work just fine. Note, however, that it will take the variable from the environment of the PostgreSQL server process, not your current client process.

3
  • 1
    How do I save variable to the environment of the PostgreSQL server process? I've tried adding it to /etc/environment and also to ~/.profile (with restart of PostgreSQL service and even with PC restart) but it didn't work. I'm using Ubuntu via WSL2. Commented Jan 18, 2022 at 17:48
  • 1
    As far as I remember, the Ubuntu PostgreSQL binaries have a special environment file under /etc/postgresql. Commented Jan 19, 2022 at 6:47
  • It works. Thank you Albe! Commented Jan 19, 2022 at 10:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.