<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - [SQL] Zmiana typu kolumny]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=1232</link>
		<description><![CDATA[Najświeższe odpowiedzi w [SQL] Zmiana typu kolumny.]]></description>
		<lastBuildDate>Fri, 22 Mar 2013 11:07:39 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: [SQL] Zmiana typu kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4113#p4113</link>
			<description><![CDATA[dla potomnych:)

ALTER TABLE tabela
     ALTER COLUMN kolumna TYPE integer
     USING CAST(kolumna AS integer);]]></description>
			<author><![CDATA[dummy@example.com (KotonPL)]]></author>
			<pubDate>Fri, 22 Mar 2013 11:07:39 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4113#p4113</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zmiana typu kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4112#p4112</link>
			<description><![CDATA[puszczam ta funkcje i pozniej cos takiego, ktore niestety czysci mi dane z kolumny....
ALTER TABLE tabela
    ALTER COLUMN kolumna TYPE integer
    USING pc_chartoint(kolumna);]]></description>
			<author><![CDATA[dummy@example.com (KotonPL)]]></author>
			<pubDate>Thu, 21 Mar 2013 15:13:11 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4112#p4112</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zmiana typu kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4111#p4111</link>
			<description><![CDATA[Myślę że chodziło o podstawienie
[code]
... USING pc_chartoint(..)
[/code]

Funkcja musi być wczesniej utworzona.]]></description>
			<author><![CDATA[dummy@example.com (rski)]]></author>
			<pubDate>Thu, 21 Mar 2013 14:06:30 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4111#p4111</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zmiana typu kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=4110#p4110</link>
			<description><![CDATA[mam podobny problem, ale nie wiem jak "zagniezdzic" powyzsza funkcje...
wyskakuje blad
 "BŁĄD:  błąd składni w lub blisko "CREATE"
LINE 3:     USING CREATE OR REPLACE FUNCTION pc_chartoint(chartoconv..."

pomocy:)]]></description>
			<author><![CDATA[dummy@example.com (KotonPL)]]></author>
			<pubDate>Thu, 21 Mar 2013 13:57:52 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=4110#p4110</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zmiana typu kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3450#p3450</link>
			<description><![CDATA[Dziękuję Ci bardzo, właśnie o funkcję "pc_chartoint" się wszystko rozchodziło :-)]]></description>
			<author><![CDATA[dummy@example.com (Shavei)]]></author>
			<pubDate>Thu, 16 Feb 2012 12:47:46 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3450#p3450</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zmiana typu kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3449#p3449</link>
			<description><![CDATA[[code]ALTER TABLE tabela
    ALTER COLUMN kolumna TYPE integer
    USING int4(kolumna);[/code]

lub zamiast int4() dodaj sobie taką funkcję

[code]
CREATE OR REPLACE FUNCTION pc_chartoint(chartoconvert character varying)
  RETURNS integer AS
$BODY$
SELECT CASE WHEN trim($1) SIMILAR TO '[0-9]+' 
        THEN CAST(trim($1) AS integer) 
    ELSE NULL END;

$BODY$
  LANGUAGE 'sql' IMMUTABLE STRICT;[/code]

i wtedy podajesz ją w using zamiast int4(). W przypadku jeśli w tabeli są jakieś dane nieintegerowe, to zamieni je na null. Czy jest Ci to potrzebne i oczekujesz takiego zachowania to nie wiem.]]></description>
			<author><![CDATA[dummy@example.com (AsYlum)]]></author>
			<pubDate>Thu, 16 Feb 2012 12:40:44 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3449#p3449</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zmiana typu kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3448#p3448</link>
			<description><![CDATA[Tylko, że to skasuje mi dane w polu "kolumna", a to zdecydowanie nie wchodzi w grę :-)

EDIT:

Ewentualnie mogę to zrobić przez skrypt PHP, jeżeli w Postgresie nie ma takiej możliwości. Chociaż wolałbym w SQL.]]></description>
			<author><![CDATA[dummy@example.com (Shavei)]]></author>
			<pubDate>Thu, 16 Feb 2012 12:19:30 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3448#p3448</guid>
		</item>
		<item>
			<title><![CDATA[Odp: [SQL] Zmiana typu kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3447#p3447</link>
			<description><![CDATA[Typ możesz zmienić bezprośrednio przez alter'a np.:

[code]ALTER TABLE tabela ALTER COLUMN kolumna TYPE integer USING NULL;[/code]

Jeśli w kolumnie kolumna znajdują się jakieś wpisy nie-liczbowe, to using na końcu je skasuje (zamiast NULL można podać dowolną wartość akceptowalną dla typu integer np. 0), ew. można zrobić wcześniej Delete na takich wpisach. Wartość domyślną można nadać/zdjąć także przez alter'a np.:

[code]ALTER TABLE tabela ALTER COLUMN kolumna SET DEFAULT 0;
ALTER TABLE
\d tabela
                          Table "public.tabela"
 Column  |  Type   |                      Modifiers                      
---------+---------+-----------------------------------------------------
 id      | integer | not null default nextval('tabela_id_seq'::regclass)
 kolumna | integer | default 0
Indexes:
    "tabela_pkey" PRIMARY KEY, btree (id)

ALTER TABLE tabela ALTER COLUMN kolumna DROP DEFAULT;
ALTER TABLE
\d tabela
                          Table "public.tabela"
 Column  |  Type   |                      Modifiers                      
---------+---------+-----------------------------------------------------
 id      | integer | not null default nextval('tabela_id_seq'::regclass)
 kolumna | integer | 
Indexes:
    "tabela_pkey" PRIMARY KEY, btree (id)[/code]]]></description>
			<author><![CDATA[dummy@example.com (gszpetkowski)]]></author>
			<pubDate>Thu, 16 Feb 2012 12:14:43 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3447#p3447</guid>
		</item>
		<item>
			<title><![CDATA[[SQL] Zmiana typu kolumny]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=3446#p3446</link>
			<description><![CDATA[Szperałem na Forum, ale niestety nie znalazłem rozwiązania (być może źle szukałem). Próbuję zmienić typ pola w tabeli. Na początku miałem zaćmienie i zrobiłem pole typu "character varying" zamiast "integer", dla danych, które będą liczbowe. 

Zauważyłem to dopiero dzisiaj i szybko chciałem to naprawić, a tu zonk :-) Próbowałem zrobić coś takiego:
[code]ALTER TABLE tabela ADD COLUMN kolumna_temp INTEGER DEFAULT 0;
UPDATE tabela SET kolumna_temp = kolumna;[/code]
A później po prostu usunąć "kolumna" i zmienić nazwę "kolumna_temp" na "kolumna". Ale Postgres krzyczy, że "kolumna" jest typu "character varying" i nie zrobi UPDATE do kolumny typu "integer". Niby poprawnie, ale jak to obejść?

Próbowałem dodawać "::integer", ale to nic nie zmienia.

Cały problem wynika z tego, że w polu "kolumna", mam zapisany "wzrost" i gdy próbuję zrobić zapytanie typu:
[code]SELECT * FROM tabela WHERE kolumna BETWEEN 150 AND 180[/code]
Wyrzuca błąd, co w sumie oczywiste, gdy typ kolumny jest zły.

Jak zmienić ten skubany typ kolumny? :-)]]></description>
			<author><![CDATA[dummy@example.com (Shavei)]]></author>
			<pubDate>Thu, 16 Feb 2012 11:51:15 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=3446#p3446</guid>
		</item>
	</channel>
</rss>
