Czy ktoś wie, jak znaleźć OID tabeli w PostgreSQL 9.1? Piszę skrypt aktualizacji, który musi przetestować istnienie kolumny w tabeli, zanim spróbuje utworzyć kolumnę. Ma to zapobiec uruchomieniu skryptu po pierwszym z błędów.Określanie OID tabeli w PostgreSQL 9.1?
Odpowiedz
Należy przejrzeć tabelę katalogów postgresowych pg_class
. Powinien być jeden wiersz na tabelę, z nazwą tabeli w kolumnie relname
, a identyfikator w ukrytej kolumnie oid
.
Tabele katalogu znajdują się w bazie danych postgres
, więc należy się łączyć z tym, a nie z bazą danych aplikacji.
Możesz również być zainteresowany tabelą katalogów pg_attribute
, która zawiera jeden wiersz na kolumnę tabeli.
Patrz: http://www.postgresql.org/docs/current/static/catalog-pg-class.html i http://www.postgresql.org/docs/current/static/catalog-pg-attribute.html
Istnieje prosty sposób, aby dostać stolik OID. Oddanych do object-identifier classregclass
(gdy połączone z odpowiednimi DB)
SELECT 'mytbl'::regclass::oid;
wartością domyślną pierwszego schematu w search_path
lub zgłasza wyjątek, jeżeli nie została znaleziona.
Albo schematu zakwalifikować jawnie:
SELECT 'myschema.mytbl'::regclass::oid;
Potem trzeba tylko sprawdzić tabeli katalogu pg_attribute
istnienia kolumny:
SELECT TRUE AS col_exists
FROM pg_attribute
WHERE attrelid = 'mytbl'::regclass
AND attname = 'mycol'
AND NOT attisdropped -- no dropped (dead) columns
-- AND attnum > 0 -- no system columns (you may or may not want this)
W PostgreSQL 9,4 lub później można również użyć to_regclass('mytbl')
, która nie zgłasza wyjątku, jeśli tabela nie zostanie znaleziona:
Wystarczy wypełnić możliwości Chciałbym dodać, że istnieje składni upuszczanie kolumn, aby bez błędu out:
ALTER TABLE DROP COLUMN mytbl IF EXISTS Mycol
Zobacz http://www.postgresql.org/docs/9.0/static/sql-altertable.html
Następnie możesz bezpiecznie dodać swoją kolumnę.
SELECT oid FROM pg_class WHERE relname = 'tbl_name' AND relkind = 'r';
Wyjaśnienie byłoby miłe ... – eirikir
- 1. ograniczenie array_agg w Postgresql 9.1
- 2. PostgreSQL 9.1 GRANT nie działa
- 3. nie można znaleźć adminpack.sql w postgresql 9.1
- 4. PostgreSQL 9.1: jak łączyć wiersze w tablicy bez duplikatów, DOŁĄCZ do kolejnej tabeli
- 5. Jak zainstalować pgcrypto w postgresql 9.1 na Windowsie?
- 6. ALTER TABLE, ustaw puste null w kolumnie null, PostgreSQL 9.1
- 7. Eksport danych tabeli PostgreSQL przy użyciu pgAdmin
- 8. Określanie superuser hasło PostgreSQL dla Docker Pojemnik
- 9. Tymczasowa funkcja postgresql tabeli
- 10. Określanie różnych sekwencji dla tabeli w Hibernacji na podklasach
- 11. Czy modyfikacja wartości współbieżnych może wpłynąć na wybór w PostgreSQL 9.1?
- 12. Wyłączyć DELETE w tabeli w PostgreSQL?
- 13. Konwersja typu. Co mam zrobić z wartością OID PostgreSQL w libpq w C?
- 14. Tworzenie tabeli przestawnej z PostgreSQL
- 15. Określanie szerokości procentowej dla komórek tabeli CSS
- 16. Postgresql skopiować dane w tabeli drzewa
- 17. czy można dodać metadane tabeli w postgresql?
- 18. Skutecznie duplikuj niektóre wiersze w tabeli PostgreSQL
- 19. Dodaj klucz podstawowy do tabeli PostgreSQL tylko, jeśli nie istnieje
- 20. SNMP: Utwórz niestandardową identyfikację OID
- 21. Jak przekonwertować znak na liczbę całkowitą w ramach funkcji PostgreSQL (9.1)?
- 22. Jak szukać dokument OID w mongoengine
- 23. Wywołanie numerycznego identyfikatora OID w PySNMP?
- 24. Określanie, które obiekty odwołują się do tabeli w SQL Server
- 25. Określanie liczby stron w każdej tabeli SQL bez użycia DBCC
- 26. Hibernate, Postgresql: Kolumna "x" jest typu oid, ale wyrażenie jest typu bajtowego
- 27. Jak korzystać z zapełniacza danych zagranicznych PostgreSQL w celu dołączenia do 2 różnych baz danych PostgreSQL
- 28. Komenda PostgreSql do wyświetlenia danych tabeli
- 29. Jak wydrukować strukturę tabeli z postgresql?
- 30. PostgreSQL Wielokrotne liczenia dla jednej tabeli
Widziałem docs na '' pg_class' i stoły pg_attribute', ale nie wiedziałem, że istnieje ukryta kolumna o nazwie 'oid' w' pg_class' tabeli. Nie mogłem dowiedzieć się, gdzie oid był od doktorów. Dzięki! –
To nie jest całkiem dokładne. Każda baza danych ma schemat o nazwie 'pg_catalog', który zawiera tabele katalogu specyficzne dla bazy danych. –
I sekunda @TonyVitabile. To była ukryta kolumna 'oid', której szukałem. –