PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Nazwy tabel Postgresql i Unicode:Dlaczego nie mogę wybrać nazwy tabeli ze schematu informacyjnego, jeśli zawiera ona znaki Unicode?

Wygląda to na błąd, być może w regclass lub coś z tym związanego:

# create table pinkƒpink1 (id serial);
NOTICE:  CREATE TABLE will create implicit sequence "pink?pink1_id_seq" for serial column "pink?pink1.id"
CREATE TABLE
# select 'pinkƒpink1'::name;
    name    
------------
 pinkƒpink1
(1 row)

# select 'pinkƒpink1'::regclass;
  regclass   
-------------
 "pinkpink1"
(1 row)

# select relname from pg_class where oid = 'pinkƒpink1'::regclass;
  relname  
-----------
 pinkpink1

# select relname from pg_class where relname = 'pinkƒpink1'::name;
 relname 
---------
(0 rows)

# select relname from pg_class where relname = 'pinkpink1';
 relname 
---------
(0 rows)

(Mój system to OSX Lion ze wszystkimi kodami utf8, jeśli ma to znaczenie).

Aby obejść ten problem, możesz rzutować go na ::regclass jak to zrobiono powyżej (ten, który znalazł stół). Zauważ, że przesyłanie do ::regclass zwróci błąd, jeśli tabela nie istnieje, więc odpowiednio ją omijaj.

Na prośbę Craiga:

# SELECT current_setting('server_encoding') AS server_encoding, current_setting('client_encoding') AS client_encoding, version();
 server_encoding | client_encoding |                                                              version                                                              
-----------------+-----------------+-----------------------------------------------------------------------------------------------------------------------------------
 UTF8            | UTF8            | PostgreSQL 9.2.4 on x86_64-apple-darwin11.4.2, compiled by Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn), 64-bit
(1 row)

I według Erwina:

# SELECT name, setting FROM pg_settings WHERE  name IN ('lc_collate','lc_ctype','client_encoding','server_encoding');
      name       |   setting   
-----------------+-------------
 client_encoding | UTF8
 lc_collate      | en_US.UTF-8
 lc_ctype        | en_US.UTF-8
 server_encoding | UTF8
(4 rows)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. oznaczony użytkownik etykietą według czasu za każdy miesiąc

  2. wyzwalacz postgresql:wyłącz automatyczne zatwierdzanie i ustaw poziom izolacji

  3. Łączenie 2 zapytań SELECT

  4. Instalacja postgresql z Homebrew i Rails na Mountain Lion

  5. Uwierzytelnianie hasłem kończy się niepowodzeniem przy złożonym haśle