<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=Migrace_dat</id>
	<title>Migrace dat - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="http://postgres.cz/index.php?action=history&amp;feed=atom&amp;title=Migrace_dat"/>
	<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=Migrace_dat&amp;action=history"/>
	<updated>2026-06-02T19:09:51Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>http://postgres.cz/index.php?title=Migrace_dat&amp;diff=444&amp;oldid=prev</id>
		<title>imported&gt;Pavel v 26. 1. 2009, 13:06</title>
		<link rel="alternate" type="text/html" href="http://postgres.cz/index.php?title=Migrace_dat&amp;diff=444&amp;oldid=prev"/>
		<updated>2009-01-26T13:06:54Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Při migraci dat z PostgreSQL 8.1 na 8.3 jsem narazil na problém s fulltextem, který zabraňoval použití pg_dumpall. Nakonec importuji po jednotlivých databázích pomocí následujících skriptů:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# vytvoři dump struktury a dump dat a pro ně simlinky v tmp&lt;br /&gt;
pg_dumpall -g &amp;gt; users.sqlx                                                                                                                                    &lt;br /&gt;
ln -s  `pwd`/users.sqlx  /tmp/migrace/users.sqlx                                                                                                              &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
for r in `psql  -A -t postgres -c &amp;quot;select datname, quote_ident(datname) from pg_database where datname not in (&amp;#039;template1&amp;#039;,&amp;#039;template0&amp;#039;)&amp;quot;;`                    &lt;br /&gt;
do                                                                                                                                                            &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
BIFS=$IFS                                                                                                                                                     &lt;br /&gt;
IFS=&amp;quot;|&amp;quot;                                                                                                                                                       &lt;br /&gt;
ra=($r);                                                                                                                                                      &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
echo ${ra[0]}                                                                                                                                                 &lt;br /&gt;
d=${ra[0]}                                                                                                                                                    &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
IFS=$BIFS                                                                                                                                                     &lt;br /&gt;
GIFS=$IFS                                                                                                                                                     &lt;br /&gt;
IFS=&amp;#039;                                                                                                                                                         &lt;br /&gt;
&amp;#039;                                                                                                                                                             &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
pg_dump  -a -E UTF8 --disable-triggers ${ra[0]} &amp;gt; ${ra[0]}.datax                                                                                              &lt;br /&gt;
pg_dump   -s  ${ra[0]}  &amp;gt; ${ra[0]}.sqlx                                                                                                                       &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
ln -s  `pwd`/${ra[0]}.datax  /tmp/migrace/${ra[0]}.datax             &lt;br /&gt;
ln -s  `pwd`/${ra[0]}.sqlx  /tmp/migrace/${ra[0]}.sqlx                                 &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
IFS=$GIFS                                                                                                                                                     &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
done;               &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# import vsech sqlx skriptů z adresáře - pro skript zakládá db                                           &lt;br /&gt;
&lt;br /&gt;
for r in `ls *.sqlx`           &lt;br /&gt;
do                                &lt;br /&gt;
  echo &amp;quot;dropdb ${r%.sqlx}&amp;quot;       &lt;br /&gt;
  dropdb ${r%.sqlx}                &lt;br /&gt;
  createdb ${r%.sqlx}     &lt;br /&gt;
done;                  &lt;br /&gt;
                        &lt;br /&gt;
echo &amp;quot;import users&amp;quot;&lt;br /&gt;
psql postgres &amp;lt; users.sqlx&lt;br /&gt;
                                                                                                                        &lt;br /&gt;
for r in `ls *.sqlx`&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;----- $r ----&amp;quot;&lt;br /&gt;
  cat $r | grep &amp;quot;tsearch2&amp;quot; &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
  res=$?&lt;br /&gt;
  if [  $res -eq &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
    echo &amp;quot;import tsearch2&amp;quot;&lt;br /&gt;
    psql ${r%.sqlx} -c &amp;#039;\i /usr/share/pgsql/contrib/tsearch2.sql&amp;#039;&lt;br /&gt;
  fi&lt;br /&gt;
  psql ${r%.sqlx} &amp;lt; $r&lt;br /&gt;
done;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Importuje všechny datové soubory&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
for r in `ls *.datax`&lt;br /&gt;
do&lt;br /&gt;
  echo &amp;quot;import data $r&amp;quot;&lt;br /&gt;
  psql ${r%.datax} &amp;lt; $r&lt;br /&gt;
done;  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Dodatečně změní statistiky na 100&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# použití - sh statistic.sh | psql postgres&lt;br /&gt;
&lt;br /&gt;
for r in `psql -A -t postgres -c &amp;quot;select datname, quote_ident(datname)                                                                                        &lt;br /&gt;
                                     from pg_database                                                                                                         &lt;br /&gt;
                                    where datname not in (&amp;#039;template1&amp;#039;,&amp;#039;template0&amp;#039;,&amp;#039;postgres&amp;#039;)&amp;quot;;`                                                              &lt;br /&gt;
do                                                                                                                                                            &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
BIFS=$IFS                                                                                                                                                     &lt;br /&gt;
IFS=&amp;quot;|&amp;quot;                                                                                                                                                       &lt;br /&gt;
ra=($r);                                                                                                                                                      &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
echo &amp;quot;\\c ${ra[0]}&amp;quot;                                                                                                                                           &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
d=${ra[0]}                                                                                                                                                    &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
IFS=$BIFS                                                                                                                                                     &lt;br /&gt;
GIFS=$IFS                                                                                                                                                     &lt;br /&gt;
IFS=&amp;#039;                                                                                                                                                         &lt;br /&gt;
&amp;#039;                                                                                                                                                             &lt;br /&gt;
        echo &amp;quot;begin;&amp;quot;                                                                                                                                         &lt;br /&gt;
        # change owner of tables, sequences and views                                                                                                         &lt;br /&gt;
        for r in `psql  -A -t $d -c \\                                                                                                                        &lt;br /&gt;
          &amp;quot;select quote_ident(r.rolname), quote_ident(n.nspname) || &amp;#039;.&amp;#039; || quote_ident(c.relname), c.relkind, quote_ident(a.attname)                          &lt;br /&gt;
              from pg_class c, pg_roles r, pg_namespace n, pg_attribute a                                                                                     &lt;br /&gt;
             where r.oid = c.relowner and  n.oid = c.relnamespace and r.rolname not in (&amp;#039;postgres&amp;#039;)                                                           &lt;br /&gt;
                   and c.relkind = &amp;#039;r&amp;#039; and a.attrelid = c.oid and attnum &amp;gt; 0 and not attisdropped;&amp;quot;`;                                                         &lt;br /&gt;
        do                                                                                                                                                    &lt;br /&gt;
          BIFS=$IFS                                                                                                                                           &lt;br /&gt;
          IFS=&amp;quot;|&amp;quot;                                                                                                                                             &lt;br /&gt;
          ra=($r);                                                                                                                                            &lt;br /&gt;
          echo &amp;quot;ALTER TABLE ${ra[1]} ALTER COLUMN ${ra[3]} SET STATISTICS 100;&amp;quot;                                                                               &lt;br /&gt;
          IFS=$BIFS                                                                                                                                           &lt;br /&gt;
        done;                                                                                                                                                 &lt;br /&gt;
        echo &amp;quot;commit;&amp;quot;                                                                                                                                        &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
IFS=$GIFS                                                                                                                                                     &lt;br /&gt;
                                                                                                                                                              &lt;br /&gt;
done;      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
S identifikací možných problémů s přetypováním lze použít následující skript, který pro 8.1 (s nutnou úpravou kódu) přepíše obsolete implicitní přetypování přetypováním obsahujícím varování:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE OR REPLACE FUNCTION generator_81_casts()&lt;br /&gt;
RETURNS void AS $$&lt;br /&gt;
DECLARE&lt;br /&gt;
  src varchar[] := &amp;#039;{integer,smallint,oid,date,double precision,real,time with time zone, time without time zone, timestamp with time zone, interval,bigint,numeric,timestamp without time zon\&lt;br /&gt;
e}&amp;#039;;&lt;br /&gt;
  fn varchar[] := &amp;#039;{int4out,int2out,oidout,date_out,float8out,float4out,timetz_out,time_out,timestamptz_out,interval_out,int8out,numeric_out,timestamp_out}&amp;#039;;&lt;br /&gt;
  fn_name varchar;&lt;br /&gt;
  fn_msg varchar; fn_body varchar;&lt;br /&gt;
BEGIN&lt;br /&gt;
  FOR i IN array_lower(src,1)..array_upper(src,1) LOOP&lt;br /&gt;
    fn_name := &amp;#039;aux_cast_func_&amp;#039; || replace(src[i],&amp;#039; &amp;#039;,&amp;#039;_&amp;#039;) ||&amp;#039;_to_text&amp;#039;;&lt;br /&gt;
    fn_msg := &amp;#039;&amp;#039;&amp;#039;using obsolete implicit casting from &amp;#039; || src[i] || &amp;#039; to text&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
    fn_body := &amp;#039;CREATE OR REPLACE FUNCTION &amp;#039;|| fn_name || &amp;#039;(&amp;#039; || src[i] ||&amp;#039;) RETURNS text AS $_$ BEGIN RAISE WARNING &amp;#039;&lt;br /&gt;
                  || fn_msg || &amp;#039;;RETURN textin(&amp;#039; || fn[i] || &amp;#039;($1)); END; $_$ LANGUAGE plpgsql IMMUTABLE&amp;#039;;&lt;br /&gt;
    EXECUTE fn_body;&lt;br /&gt;
    -- for 8.1                                                                                                                                                                                 &lt;br /&gt;
    --EXECUTE &amp;#039;UPDATE pg_cast SET castfunc = &amp;#039;&amp;#039;&amp;#039; || fn_name || &amp;#039;&amp;#039;&amp;#039;::regproc WHERE castsource = &amp;#039;&amp;#039;&amp;#039; || src[i] || &amp;#039;&amp;#039;&amp;#039;::regtype AND casttarget = &amp;#039;&amp;#039;text&amp;#039;&amp;#039;::regtype&amp;#039;;                              &lt;br /&gt;
   DROP CAST &amp;#039;CREATE CAST (&amp;#039; || src[i] || &amp;#039; AS text)&amp;#039;;&lt;br /&gt;
   EXECUTE &amp;#039;CREATE CAST (&amp;#039; || src[i] || &amp;#039; AS text) WITH FUNCTION &amp;#039; || fn_name || &amp;#039;(&amp;#039; || src[i] || &amp;#039;) AS IMPLICIT&amp;#039;;&lt;br /&gt;
  END LOOP;&lt;br /&gt;
  RETURN;&lt;br /&gt;
END;&lt;br /&gt;
$$ LANGUAGE plpgsql;&lt;br /&gt;
SELECT generator_81_casts();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;Pavel</name></author>
	</entry>
</feed>