Danke für Deine Antwort. Es ist leider auch der normale Betrieb betroffen. Die Tests wurden unter gleichen Bedingungen gemacht -> Also Neuinstallation von Ubuntu und Postgres auf dem selben Rechner. Dabei ist dann natürlich auch die Datenbank leer.
Inzwischen habe ich die Vermutung, dass es an einer problematischen UTF-8 Codierung liegen könnte. Leider ist mir nicht klar, warum der Unterschied nur zwischen den Ubuntu Versionen auftritt.
Hier ein kleines Python-Skript mit dem auch andere Testen können:
-- coding: utf-8 --
import os, random, timeit, subprocess
def get_random_unicode(length):
get_char = unichr
include_ranges = [ ( 0x16A0, 0x16F0 ) ] # celtic runes
alphabet = [ get_char(code_point) for current_range in include_ranges
for code_point in range(current_range[0], current_range[1] + 1) ]
return ‘’.join(random.choice(alphabet) for i in range(length))
def cmd(q):
cmd = [‘psql’] + [’-q’] + [’-d’] + [‘testdb’] + [’-c’] + [q]
(out,err) = subprocess.Popen(cmd,stdout=subprocess.PIPE).communicate()
start = timeit.default_timer()
(out,err) = subprocess.Popen([‘dropdb’, ‘testdb’], stdout=subprocess.PIPE).communicate()
(out,err) = subprocess.Popen([‘createdb’, ‘testdb’], stdout=subprocess.PIPE).communicate()
cmd(‘CREATE TABLE testtable (id integer NOT NULL, q character varying(255) NOT NULL);’)
for i in xrange(1, 1000):
#print i
#searchstring = ‘’.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10)) # ascii
searchstring = get_random_unicode(10).encode(‘utf-8’) # utf-8
cmd (“INSERT INTO testtable VALUES (” + str(i) + “, '” + searchstring+ “’)”)
stop = timeit.default_timer()
print stop - start
start = timeit.default_timer()
cmd(‘ALTER TABLE ONLY testtable ADD CONSTRAINT testtable_q_key UNIQUE (q);’)
stop = timeit.default_timer()
print stop - start
Werden die keltischen Runen eingespielt gibt es bei 1000 Datensätzen eine Zeitdifferenz von 40.91/10.32 vs. 33.45/0.61 Sekunden. D.h. das Erstellen des Constraints ist bei U16.04 um mehr als das 10-fache langsamer. Einstellungen wie Locale oder UTF-8 Kodierung wurden überprüft und sind gleich. Vielleicht hat jemand noch eine Idee… THX Hans