Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
625d4b38
Commit
625d4b38
authored
Dec 09, 2005
by
Peter Eisentraut
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Let initdb detect the date order of the lc_time locale and initialize the
datestyle parameter of the new cluster accordingly.
parent
cd8f3ec5
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
79 additions
and
5 deletions
+79
-5
doc/TODO
doc/TODO
+1
-1
doc/src/sgml/config.sgml
doc/src/sgml/config.sgml
+6
-3
src/bin/initdb/initdb.c
src/bin/initdb/initdb.c
+72
-1
No files found.
doc/TODO
View file @
625d4b38
...
...
@@ -566,7 +566,7 @@ SQL Commands
Clients
=======
*
Have initdb set the input DateStyle (MDY or DMY) based on locale?
*
-Have initdb set the input DateStyle (MDY or DMY) based on locale
* Have pg_ctl look at PGHOST in case it is a socket directory?
* Allow pg_ctl to work properly with configuration files located outside
the PGDATA directory
...
...
doc/src/sgml/config.sgml
View file @
625d4b38
<!--
$PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.3
7 2005/11/17 22:14:50 tgl
Exp $
$PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.3
8 2005/12/09 15:51:13 petere
Exp $
-->
<chapter Id="runtime-config">
<title>Server Configuration</title>
...
...
@@ -32,7 +32,7 @@ $PostgreSQL: pgsql/doc/src/sgml/config.sgml,v 1.37 2005/11/17 22:14:50 tgl Exp $
<para>
One way to set these parameters is to edit the file
<filename>postgresql.conf</><indexterm><primary>postgresql.conf</></>,
which is normally kept in the data directory. (<
command
>initdb</>
which is normally kept in the data directory. (<
application
>initdb</>
installs a default copy there.) An example of what this file might look
like is:
<programlisting>
...
...
@@ -3300,7 +3300,10 @@ SELECT * FROM parent WHERE key = 2400;
keywords <literal>US</>, <literal>NonEuro</>, and
<literal>NonEuropean</> are synonyms for <literal>MDY</>. See
<xref linkend="datatype-datetime"> for more information. The
default is <literal>ISO, MDY</>.
built-in default is <literal>ISO, MDY</>, but
<application>initdb</application> will initialize the
configuration file with a setting that corresponds to the
behavior of the chosen <varname>lc_time</varname> locale.
</para>
</listitem>
</varlistentry>
...
...
src/bin/initdb/initdb.c
View file @
625d4b38
...
...
@@ -42,7 +42,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
* Portions taken from FreeBSD.
*
* $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.10
0 2005/11/22 18:17:28 momjian
Exp $
* $PostgreSQL: pgsql/src/bin/initdb/initdb.c,v 1.10
1 2005/12/09 15:51:14 petere
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -57,11 +57,13 @@
#ifdef HAVE_LANGINFO_H
#include <langinfo.h>
#endif
#include <time.h>
#include "libpq/pqsignal.h"
#include "mb/pg_wchar.h"
#include "getaddrinfo.h"
#include "getopt_long.h"
#include "miscadmin.h"
#ifndef HAVE_INT_OPTRESET
int
optreset
;
...
...
@@ -186,6 +188,7 @@ static void make_postgres(void);
static
void
trapsig
(
int
signum
);
static
void
check_ok
(
void
);
static
char
*
escape_quotes
(
const
char
*
src
);
static
int
locale_date_order
(
const
char
*
locale
);
static
bool
chklocale
(
const
char
*
locale
);
static
void
setlocales
(
void
);
static
void
usage
(
const
char
*
progname
);
...
...
@@ -1195,6 +1198,20 @@ setup_config(void)
snprintf
(
repltok
,
sizeof
(
repltok
),
"lc_time = '%s'"
,
lc_time
);
conflines
=
replace_token
(
conflines
,
"#lc_time = 'C'"
,
repltok
);
switch
(
locale_date_order
(
lc_time
))
{
case
DATEORDER_YMD
:
strcpy
(
repltok
,
"datestyle = 'iso, ymd'"
);
break
;
case
DATEORDER_DMY
:
strcpy
(
repltok
,
"datestyle = 'iso, dmy'"
);
break
;
case
DATEORDER_MDY
:
default:
strcpy
(
repltok
,
"datestyle = 'iso, mdy'"
);
break
;
}
conflines
=
replace_token
(
conflines
,
"#datestyle = 'iso, mdy'"
,
repltok
);
snprintf
(
path
,
sizeof
(
path
),
"%s/postgresql.conf"
,
pg_data
);
writefile
(
path
,
conflines
);
...
...
@@ -2052,6 +2069,60 @@ escape_quotes(const char *src)
return
result
;
}
/*
* Determine likely date order from locale
*/
static
int
locale_date_order
(
const
char
*
locale
)
{
struct
tm
testtime
;
char
buf
[
128
];
char
*
posD
;
char
*
posM
;
char
*
posY
;
char
*
save
;
size_t
res
;
int
result
;
result
=
DATEORDER_MDY
;
/* default */
save
=
setlocale
(
LC_TIME
,
NULL
);
if
(
!
save
)
return
result
;
save
=
xstrdup
(
save
);
setlocale
(
LC_TIME
,
locale
);
memset
(
&
testtime
,
0
,
sizeof
(
testtime
));
testtime
.
tm_mday
=
22
;
testtime
.
tm_mon
=
10
;
/* November, should come out as "11" */
testtime
.
tm_year
=
133
;
/* 2033 */
res
=
strftime
(
buf
,
sizeof
(
buf
),
"%x"
,
&
testtime
);
setlocale
(
LC_TIME
,
save
);
free
(
save
);
if
(
res
==
0
)
return
result
;
posM
=
strstr
(
buf
,
"11"
);
posD
=
strstr
(
buf
,
"22"
);
posY
=
strstr
(
buf
,
"33"
);
if
(
!
posM
||
!
posD
||
!
posY
)
return
result
;
if
(
posY
<
posM
&&
posM
<
posD
)
result
=
DATEORDER_YMD
;
else
if
(
posD
<
posM
)
result
=
DATEORDER_DMY
;
else
result
=
DATEORDER_MDY
;
return
result
;
}
/*
* check if given string is a valid locale specifier
*/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment