Grundsätzlich habe ich eine Tabelle1 mit eindeutigen IDs von Funktionen für eine Stadt, jetzt habe ich eine Tabelle2 für Funktionen für dieses Land.
Ich muss neue IDs für die Ländertabelle erstellen (diese müssen dieselbe Reihenfolge wie die Stadt haben, damit die IDs beim Querverweisen von Tabellen übereinstimmen)
Wie kann man table2 die gleichen IDs wie table1 in dieser Stadt und dann neue IDs für Features an anderer Stelle geben? Im Wesentlichen die Sequenz teilen
Bearbeiten: Die Tabellen sind bereits erstellt, wie kann ich table2 aktualisieren?
Wenn Sie manuell eine Sequenz erstellen und diese als Standardwert den ID-Spalten zuweisen, dann funktioniert es. Um jedoch einen vorhandenen Wert wiederzuverwenden, müssten wir einen Trigger erstellen, der einen vorhandenen Wert zuweist oder einen neuen aus der gemeinsam genutzten Sequenz erhält.
create sequence baz;
create table foo(id bigint default nextval('baz'), value text);
create table bar(id bigint default nextval('baz'), value date);
insert into foo (value) values ('Hello');
insert into bar (value) values (now());
insert into foo (value) values ('World');
insert into bar (value) values (now());
select 'foo', id, value::text from foo
union all
select 'bar', id, value::text from bar
Und das Ergebnis ist:
foo 1 Hello
bar 2 2018-10-29
foo 3 World
bar 4 2018-10-29
Und als Bonus:
drop sequence baz
ERROR: cannot drop sequence baz because other objects depend on it
Detail:
default for table foo column id depends on sequence baz
default for table bar column id depends on sequence baz
Hint: Use DROP ... CASCADE to drop the dependent objects too.
Bearbeiten: Wenn wir eine Nachbearbeitung durchführen können, könnte dieser Ansatz verwendet werden, um Werte für die fehlenden ID-Spalten zuzuweisen:
update bar
SET id = coalesce((select id from foo where bar.city_name = foo.city_name),nextval('baz'))
WHERE id is null
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen