2017-09-06 3 views
1

Wir haben unsere lange verwendete interne db Namenskonventionen. Zum Beispiel: Suffix für Indizes ist "_ix", für Fremdschlüssel - "_fk".PostgreSQL. Ist es möglich, die Standardbenennung anzupassen?

Diese Konventionen stehen im Konflikt mit default postgresql naming conventions: "_idx" für Index und "_fkey" für Fremdschlüssel.

Zum Beispiel. Wenn ich einen Index erzeuge und den Indexnamen nicht explizit wie diesen CREATE INDEX ON a (id); definiere, dann erhalte ich einen solchen Indexnamen: a_id_idx. Aber gemäß unseren Konventionen, die nicht nur für postgresql verwendet werden, muss es a_id_ix sein.

Der beste Weg wäre, das automatisch generierte Namensmuster so zu ändern, dass es unseren Konventionen entspricht. Scheint, es sollte einfach sein, aber ich kann nicht finden, wie es gemacht werden kann.

Irgendwelche Lösungen?

+0

Wenn Sie nicht standardmäßige Namen möchten, legen Sie nicht standardmäßige Namen fest. –

+0

[Ich denke immer noch, dass es eine schlechte Idee ist, aber] https://www.postgresql.org/docs/9.6/static/sql-alterindex.html 'ALTER INDEX [IF EXISTS] name RENAME TO neuer_name;' – wildplasser

+0

@CraigRinger , gibt es 2 Gründe, warum ich suche, die Voreinstellungen zu ändern: 1. Es gibt seriellen Typ (ziemlich bequem), der Reihenfolge mit Namen {table_name} _ {column_name} _seq erzeugt, und ich kann Name nicht ausdrücklich ohne manuelle Reihenfolgekreation definieren 2. Es ist falsch zu verbieten, die Autogeneration überhaupt zu verwenden, wenn es eine Alternative gibt. Aber wenn ich die postgres Standardeinstellungen auf globaler Ebene nicht ändern kann, dann muss ich wahrscheinlich einige Regeln in unseren Konventionen hinzufügen, die die Verwendung des seriellen Typs und einiger anderer Funktionen verbieten. – keddok

Antwort

0
CREATE INDEX index_name ON a (id); 
+0

In einigen Fällen kann ich keinen expliziten Namen definieren. Zum Beispiel: Für den seriellen Spaltentyp erzeugt postgresql eine Sequenz mit dem Namen {table_name} _ {column_name} _seq, aber ich brauche {table_name} _seq. – keddok

+2

@keddok: Ja, du kannst: 'create sequence some_table_seq; create table some_table (id ganzzahl default nextval ('some_table_seq')); alter sequence some_table_seq gehört zu some_table.id; ' –

+0

Danke, @a_horse_with_no_name. Aber verstehe, dass es andere Wege gibt. Ich will nicht die Verwendung von seriellen Typ prohobit, es ist sehr praktisch. Ich möchte nur die PostgreSQL-Standardeinstellungen ändern. – keddok

Verwandte Themen