Re: [QUESTIONS] 6.2.1 COPY X FROM stdin; -- broken pipe - Mailing list pgsql-hackers

From Thomas G. Lockhart
Subject Re: [QUESTIONS] 6.2.1 COPY X FROM stdin; -- broken pipe
Date
Msg-id 34F77E50.1DD5DEDF@alumni.caltech.edu
Whole thread Raw
Responses Re: [HACKERS] Re: [QUESTIONS] 6.2.1 COPY X FROM stdin; -- broken pipe  (Cristian Gafton <gafton@redhat.com>)
List pgsql-hackers
>     oe> Try setting the environment variable LANG before starting the
>     oe> postmaster:
>     oe>   $ export LANG=en_US
> Unfortunately, this doesn't prevent the backend problem; the backend
> still complains about the money format the and front-end gets a broken
> pipe.  Not sure what about the locale postgres doesn't like.  For now,
> I guess I'll just stick with my home-built version that doesn't use
> the locale at all.

I tried this at my clean RH5.0 machine at work, with the RH5.0 rpm
installation of Postgres. It didn't help, and I guess I would have been
suprised if it did since the locale environment should have defaulted to
the "C" (same as "POSIX"?) conventions. I didn't get a backend crash,
just the usual symptom.

Didn't find a new Postgres package in Cristian's directory when I looked
this morning, but _did_ find a glibc2.0.7-2. Unfortunately it didn't seem
to fix the rounding problem in date/time. I stopped and restarted the
Postgres backend, but did not reboot the machine; was that sufficient?
Seems like 2.0.7-2 should have the features (and fixes) Oliver reported
for Debian, so don't know the story :(

My little test program, which also fails on my RH4.2 system, is included
below. It should return some characters related to locale; in this
version it tries the numeric decimal point (which does print) and the
money decimal point, which doesn't. Used to work, though as I mentioned
the code as it is currently may be damaged by my trial and error attempts
to get locale support working.

                                                    - Tom
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <locale.h>

struct lconv *lc;

int main(int argc, char **argv) {
  if (argc > 1)
    printf( "environment variable is %s\n", getenv(argv[1]));

  printf( "locale set to %s\n", setlocale(LC_MONETARY, "C"));
  lc = localeconv();

  printf("%c %c\n", *lc->decimal_point, *lc->mon_decimal_point);
  exit(0);
}

pgsql-hackers by date:

Previous
From: "Thomas G. Lockhart"
Date:
Subject: Re: [HACKERS] 6.3 Features
Next
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] 6.3 Features