Wiem, że ten post jest dość stary, ale znalazłem rozwiązanie przez CMS, aby było bardzo przydatne, ponieważ szukałem zautomatyzowanego sposobu łączenia sekwencji z kolumną tabeli i chciałem się nią podzielić. Kluczem była tabela katalogowa pg_depend. Rozszerzyłem to, co zostało zrobione:
WITH fq_objects AS (SELECT c.oid,n.nspname || '.' ||c.relname AS fqname ,
c.relkind, c.relname AS relation
FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace),
sequences AS (SELECT oid,fqname FROM fq_objects WHERE relkind = 'S'),
tables AS (SELECT oid, fqname FROM fq_objects WHERE relkind = 'r')
SELECT
s.fqname AS sequence,
'->' as depends,
t.fqname AS table,
a.attname AS column
FROM
pg_depend d JOIN sequences s ON s.oid = d.objid
JOIN tables t ON t.oid = d.refobjid
JOIN pg_attribute a ON a.attrelid = d.refobjid and a.attnum = d.refobjsubid
WHERE
d.deptype = 'a' ;
Ta wersja dodaje kolumnę do listy zwróconych pól. Mając zarówno nazwę tabeli, jak i nazwę kolumny, wywołanie pg_set_serial_sequence ułatwia zapewnienie, że wszystkie sekwencje w bazie danych są ustawione poprawnie. Na przykład:
CREATE OR REPLACE FUNCTION public.reset_sequence(tablename text, columnname text)
RETURNS void
LANGUAGE plpgsql
AS $function$
DECLARE
_sql VARCHAR := '';
BEGIN
_sql := $$SELECT setval(pg_get_serial_sequence('$$ || tablename || $$', '$$ || columnname || $$'), (SELECT COALESCE(MAX($$ || columnname || $$),1) FROM $$ || tablename || $$), true)$$;
EXECUTE _sql;
END;
$function$;
Mam nadzieję, że to pomoże komuś w zresetowaniu sekwencji!
Należy zauważyć, że dokonujesz konwersji w niewłaściwy sposób. Odkąd Oracle kupił Sun, powoli zabijają MySQL, więc jeśli nie gardzisz swoim klientem (w takim przypadku powinieneś po prostu zrezygnować) powinieneś trzymać się PostgreSQL, ponieważ żadna korporacja (pro-monopol na nie) nie może nadejść, pożerać PostgreSQL i ostatecznie zamieniają go na własną bazę danych. – John
@John Powiedziałabym, że istnieje miliard i jeszcze jeden powód, dla którego należy postgres, i miliard więcej, aby nigdy nie dotykać mysql, ale tak - twój punkt jest nadal ważny :) – Ruslan
@ John w tym czasie (2009) potrzebujemy prostszej bazy danych do radzenia sobie - i mysql był lepiej połączony z php – apelliciari